Sobes.tech
Middle

Šta se dešava nakon što dobijemo DNS i pošaljemo zahtev našem servisu?

sobes.tech АИ

Одговор од АИ

  1. Браузер uspostavlja TCP vezu sa serverom na portu 80 (za HTTP) ili 443 (za HTTPS).
  2. Browser šalje HTTP zahtev, koji sadrži metodu (GET, POST itd.), putanju do traženog resursa, verziju protokola, zaglavlja (User-Agent, Accept, Cookie itd.) i, moguće, telo zahteva (za POST).
  3. Server prima zahtev.
  4. Web server (npr. Nginx, Apache) prihvata zahtev i, ako je konfigurisan, ga prosleđuje Ruby aplikaciji (npr. putem Rack, Passenger, Unicorn).
  5. Ruby aplikacija obrađuje zahtev. To uključuje:
    • Ruting zahteva ka odgovarajućem kontroleru i akciji na osnovu putanje i metode.
    • Ekstrakciju parametara iz URL-a, zaglavlja i tela zahteva.
    • Izvršavanje logike aplikacije (npr. interakcija sa bazom podataka, kalkulacije).
    • Pripremu odgovora.
  6. Ruby aplikacija generiše HTTP odgovor. On uključuje:
    • Statusni kod (npr. 200 OK, 404 Not Found, 500 Internal Server Error).
    • Zaglavlja odgovora (Content-Type, Content-Length, Set-Cookie itd.).
    • Telo odgovora (HTML, JSON, XML itd.).
  7. Ruby aplikacija šalje odgovor nazad web serveru.
  8. Web server šalje odgovor klijentu (pregledaču).
  9. Pregledač prima odgovor, analizira ga, renderuje dobijene podatke (ako je HTML) i obrađuje dodatne zahteve (npr. za CSS, JS, slike).
  10. TCP veza može biti zatvorena ili održavana za naredne zahteve (Keep-Alive).
# Primer osnovnog rutiranja u Rails-u
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Rutiranje korenskog URL-a na kontroler welcome, akciju index
  get 'users/:id', to: 'users#show' # Rutiranje GET /users/:id na kontroler users, akciju show
end

# Primer kontrolera u Rails-u
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Dobijanje parametra :id iz URL-a i pretraga korisnika
    # Render @user (obično putem view šablona)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Obrada slučaja kada korisnik nije pronađen
  end
end