Sobes.tech
Middle

Čo sa deje po tom, čo dostaneme DNS a odošleme požiadavku na našu službu?

sobes.tech AI

Odpoveď od AI

  1. Prehliadač vzpostavi TCP spoj s strežnikom na portu 80 (za HTTP) ali 443 (za HTTPS).
  2. Prehliadač pošlje HTTP zahtevo, ki vsebuje metodo (GET, POST itd.), pot do zahtevane vire, različico protokola, glave (User-Agent, Accept, Cookie itd.) in morebiti telo zahteve (za POST).
  3. Strežnik prejme zahtevo.
  4. Spletni strežnik (npr. Nginx, Apache) sprejme zahtevo in, če je konfiguriran, jo posreduje Ruby aplikaciji (npr. preko Rack, Passenger, Unicorn).
  5. Ruby aplikacija obdela zahtevo. To vključuje:
    • Usmerjanje zahteve do ustreznega kontrolerja in akcije glede na pot in metodo.
    • Izvleček parametrov iz URL-ja, glave in telesa zahteve.
    • Izvajanje logike aplikacije (npr. interakcija z bazo podatkov, izračuni).
    • Pripravo odgovora.
  6. Ruby aplikacija ustvari HTTP odgovor. Ta vključuje:
    • Statusno kodo (npr. 200 OK, 404 Not Found, 500 Internal Server Error).
    • Glave odgovora (Content-Type, Content-Length, Set-Cookie itd.).
    • Telo odgovora (HTML, JSON, XML itd.).
  7. Ruby aplikacija pošlje odgovor nazaj na spletni strežnik.
  8. Spletni strežnik pošlje odgovor odjemalcu (brskalniku).
  9. Brskalnik prejme odgovor, ga analizira, prikaže prejete podatke (če je HTML) in obravnava dodatne zahteve (npr. za CSS, JS, slike).
  10. TCP povezava je lahko zaprta ali vzdrževana za nadaljnje zahteve (Keep-Alive).
# Primer osnovnega usmerjanja v Rails
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Usmerjanje korenskega URL-ja na kontroler welcome, akcijo index
  get 'users/:id', to: 'users#show' # Usmerjanje GET /users/:id na kontroler users, akcijo show
end

# Primer kontrolerja v Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Pridobitev parametra :id iz URL-ja in iskanje uporabnika
    # Prikaz @user (običajno preko predloge pogleda)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Obvladovanje primera, ko uporabnik ni najden
  end
end