Sobes.tech
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

  1. Browserul stabilește o conexiune TCP cu serverul pe portul 80 (pentru HTTP) sau 443 (pentru HTTPS).
  2. 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).
  3. Serverul primește cererea.
  4. Serverul web (de exemplu, Nginx, Apache) acceptă cererea și, dacă este configurat, o transmite aplicației Ruby (de exemplu, prin Rack, Passenger, Unicorn).
  5. 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.
  6. 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.).
  7. Aplicația Ruby trimite răspunsul înapoi către serverul web.
  8. Serverul web trimite răspunsul către client (browser).
  9. Browserul primește răspunsul, îl analizează, îl redă și procesează solicitări suplimentare (de exemplu, pentru CSS, JS, imagini).
  10. 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