Middle
Ce se întâmplă după ce primim DNS-ul și trimitem solicitarea către serviciul nostru?
sobes.tech AI
Răspuns de la AI
- Browserul stabilește o conexiune TCP cu serverul pe portul 80 (pentru HTTP) sau 443 (pentru HTTPS).
- Browserul trimite o cerere HTTP, care conține metoda (GET, POST etc.), calea către resursa solicitată, versiunea protocolului, anteturile (User-Agent, Accept, Cookie etc.) și, posibil, corpul cererii (pentru POST).
- Serverul primește cererea.
- Serverul web (de exemplu, Nginx, Apache) acceptă cererea și, dacă este configurat, o transmite aplicației Ruby (de exemplu, prin Rack, Passenger, Unicorn).
- Aplicația Ruby procesează cererea. Aceasta include:
- Rutarea cererii către controllerul și acțiunea corespunzătoare în funcție de cale și metodă.
- Extrage parametrii din URL, anteturi și corpul cererii.
- Execută logica aplicației (de exemplu, interacțiune cu baza de date, calcule).
- Pregătește răspunsul.
- Aplicația Ruby generează un răspuns HTTP. Acesta include:
- Codul de stare (de exemplu, 200 OK, 404 Not Found, 500 Internal Server Error).
- Anteturile răspunsului (Content-Type, Content-Length, Set-Cookie etc.).
- Corpul răspunsului (HTML, JSON, XML etc.).
- Aplicația Ruby trimite răspunsul înapoi către serverul web.
- Serverul web trimite răspunsul către client (browser).
- Browserul primește răspunsul, îl analizează, îl redă și procesează solicitări suplimentare (de exemplu, pentru CSS, JS, imagini).
- Conexiunea TCP poate fi închisă sau menținută pentru solicitări ulterioare (Keep-Alive).
# Exemplu de rutare de bază în Rails
# config/routes.rb
Rails.application.routes.draw do
root 'welcome#index' # Rutare URL rădăcină către controller-ul welcome, acțiunea index
get 'users/:id', to: 'users#show' # Rutare GET /users/:id către controller-ul users, acțiunea show
end
# Exemplu de controller în Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id]) # Obține parametrul :id din URL și caută utilizatorul
# Randează @user (de obicei, printr-un șablon de vizualizare)
rescue ActiveRecord::RecordNotFound
render file: "#{Rails.root}/public/404.html", status: :not_found # Tratarea cazului în care utilizatorul nu este găsit
end
end