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
- Prehliadač vzpostavi TCP spoj s strežnikom na portu 80 (za HTTP) ali 443 (za HTTPS).
- 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).
- Strežnik prejme zahtevo.
- Spletni strežnik (npr. Nginx, Apache) sprejme zahtevo in, če je konfiguriran, jo posreduje Ruby aplikaciji (npr. preko Rack, Passenger, Unicorn).
- 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.
- 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.).
- Ruby aplikacija pošlje odgovor nazaj na spletni strežnik.
- Spletni strežnik pošlje odgovor odjemalcu (brskalniku).
- Brskalnik prejme odgovor, ga analizira, prikaže prejete podatke (če je HTML) in obravnava dodatne zahteve (npr. za CSS, JS, slike).
- 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