Middle
Kas vyksta po to, kai gauname DNS ir siunčiame užklausą mūsų paslaugai?
sobes.tech AI
Atsakymas iš AI
- Naršyklė nustato TCP ryšį su serveriu naudodama 80 prievadą (HTTP) arba 443 prievadą (HTTPS).
- Naršyklė siunčia HTTP užklausą, kuri apima metodą (GET, POST ir kt.), prašomo ištekliaus kelią, protokolo versiją, antraštes (User-Agent, Accept, Cookie ir kt.) ir, galbūt, užklausos kūną (POST).
- Serveris gauna užklausą.
- Žiniatinklio serveris (pvz., Nginx, Apache) priima užklausą ir, jei sukonfigūruotas, perduoda ją Ruby programai (pvz., per Rack, Passenger, Unicorn).
- Ruby programa apdoroja užklausą. Tai apima:
- Užklausos maršrutizaciją į atitinkamą kontrolerį ir veiksmą pagal kelią ir metodą;
- Parametrų išgavimą iš URL, antraščių ir kūno;
- Programos logikos vykdymą (pvz., duomenų bazės sąveiką, skaičiavimus);
- Atsakymo paruošimą.
- Ruby programa sukuria HTTP atsakymą. Jame yra:
- Statuso kodas (pvz., 200 OK, 404 Not Found, 500 Internal Server Error);
- Atsakymo antraštės (Content-Type, Content-Length, Set-Cookie ir kt.);
- Atsakymo kūnas (HTML, JSON, XML ir kt.).
- Ruby programa grąžina atsakymą atgal žiniatinklio serveriui.
- Žiniatinklio serveris siunčia atsakymą klientui (naršyklei).
- Naršyklė gauna atsakymą, analizuoja jį, atvaizduoja gautus duomenis (jei tai HTML) ir apdoroja papildomus užklausimus (pvz., CSS, JS, paveikslėlius).
- TCP ryšys gali būti uždaromas arba palaikomas tolimesniems užklausimams (Keep-Alive).
# Pagrindinio maršrutizavimo pavyzdys Rails
# config/routes.rb
Rails.application.routes.draw do
root 'welcome#index' # Pagrindinis URL nukreipia į welcome kontrolerį, index veiksmą
get 'users/:id', to: 'users#show' # GET /users/:id maršrutizacija į users kontrolerį, show veiksmą
end
# Kontrolerio pavyzdys Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id]) # Gauti :id parametrą iš URL ir ieškoti naudotojo
# Rodyti @user (dažniausiai per vaizdo šabloną)
rescue ActiveRecord::RecordNotFound
render file: "#{Rails.root}/public/404.html", status: :not_found # Jei naudotojas nerandamas
end
end