Sobes.tech
Middle

Ի՞նչ է տեղի ունենում, երբ մենք ստանում ենք DNS-ը և ուղարկում ենք մեր ծառայությանը հարցում։

sobes.tech AI

Պատասխան AI-ից

  1. Բրաուզերը հաստատում է TCP կապ սերվերի հետ՝ 80 պորտով (HTTP) կամ 443 պորտով (HTTPS):
  2. Բրաուզերը ուղարկում է HTTP հարցում, որը պարունակում է մեթոդ (GET, POST և այլն), խնդրող ռեսուրսի ուղին, պրոտոկոլի տարբերակը, գլխիկներ (User-Agent, Accept, Cookie և այլն) և հնարավոր է՝ հարցման մարմինը (POST-ի համար):
  3. Սերվերը ստանում է հարցումը:
  4. Վեբ սերվերը (օրինակ՝ Nginx, Apache) ընդունում է հարցումը և, եթե կարգավորած է, փոխանցում է Ruby հավելվածին (օրինակ՝ Rack, Passenger, Unicorn):
  5. Ruby հավելվածը մշակում է հարցումը: Դա ներառում է՝
    • Հարցման ուղու և մեթոդի հիման վրա համապատասխան վերահղում և գործողության ընտրություն:
    • Պարամետրերի հանելը URL-ից, գլխիկներից և մարմնից:
    • Հավելվածի տրամաբանական աշխատանքը (օրինակ՝ տվյալների բազայի հետ փոխազդեցություն, հաշվարկներ):
    • Պատասխան պատրաստելը:
  6. Ruby հավելվածը ձևավորում է HTTP-պատասխան, որը ներառում է՝
    • Կարգավիճակի կոդ (օրինակ՝ 200 OK, 404 Not Found, 500 Internal Server Error):
    • Պատասխանային գլխիկներ (Content-Type, Content-Length, Set-Cookie և այլն):
    • Պատասխանային մարմինը (HTML, JSON, XML և այլն):
  7. Ruby հավելվածը ուղարկում է պատասխանը վեբ սերվերին:
  8. Վեբ սերվերը ուղարկում է պատասխանը հաճախորդին (բրաուզերին):
  9. Բրաուզերը ստանում է պատասխանը, վերլուծում է այն, ռենդեր է անում ստացված տվյալները (եթե դա HTML է) և մշակվում են լրացուցիչ հարցումներ (օրինակ՝ CSS, JS, պատկերներ):
  10. TCP կապը կարող է փակվել կամ պահպանվել հաջորդ հարցումների համար (Keep-Alive):
# Բազային маршруտվության օրինակ Rails-ում
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Մարշրութային հիմնական URL-ը՝ welcome կոնտրոլեր, index գործողությամբ
  get 'users/:id', to: 'users#show' # GET /users/:id ուղու մարշրութային՝ users կոնտրոլեր, show գործողությամբ
end

# Կոնտրոլեր Rails-ում
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Պարամետրի :id հանելը URL-ից և օգտվողի որոնում
    # Ցուցադրել @user (հաճախ view թեմպլատով)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Նշանակված օգտվողի չգտնվելու դեպքում
  end
end