Middle
Ի՞նչ է տեղի ունենում, երբ մենք ստանում ենք DNS-ը և ուղարկում ենք մեր ծառայությանը հարցում։
sobes.tech AI
Պատասխան AI-ից
- Բրաուզերը հաստատում է TCP կապ սերվերի հետ՝ 80 պորտով (HTTP) կամ 443 պորտով (HTTPS):
- Բրաուզերը ուղարկում է HTTP հարցում, որը պարունակում է մեթոդ (GET, POST և այլն), խնդրող ռեսուրսի ուղին, պրոտոկոլի տարբերակը, գլխիկներ (User-Agent, Accept, Cookie և այլն) և հնարավոր է՝ հարցման մարմինը (POST-ի համար):
- Սերվերը ստանում է հարցումը:
- Վեբ սերվերը (օրինակ՝ Nginx, Apache) ընդունում է հարցումը և, եթե կարգավորած է, փոխանցում է Ruby հավելվածին (օրինակ՝ Rack, Passenger, Unicorn):
- Ruby հավելվածը մշակում է հարցումը: Դա ներառում է՝
- Հարցման ուղու և մեթոդի հիման վրա համապատասխան վերահղում և գործողության ընտրություն:
- Պարամետրերի հանելը URL-ից, գլխիկներից և մարմնից:
- Հավելվածի տրամաբանական աշխատանքը (օրինակ՝ տվյալների բազայի հետ փոխազդեցություն, հաշվարկներ):
- Պատասխան պատրաստելը:
- Ruby հավելվածը ձևավորում է HTTP-պատասխան, որը ներառում է՝
- Կարգավիճակի կոդ (օրինակ՝ 200 OK, 404 Not Found, 500 Internal Server Error):
- Պատասխանային գլխիկներ (Content-Type, Content-Length, Set-Cookie և այլն):
- Պատասխանային մարմինը (HTML, JSON, XML և այլն):
- Ruby հավելվածը ուղարկում է պատասխանը վեբ սերվերին:
- Վեբ սերվերը ուղարկում է պատասխանը հաճախորդին (բրաուզերին):
- Բրաուզերը ստանում է պատասխանը, վերլուծում է այն, ռենդեր է անում ստացված տվյալները (եթե դա HTML է) և մշակվում են լրացուցիչ հարցումներ (օրինակ՝ CSS, JS, պատկերներ):
- 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