Middle
Co se stane poté, co obdržíme DNS a odešleme požadavek na naši službu?
sobes.tech AI
Odpověď od AI
- Prohlížeč naváže TCP spojení se serverem na portu 80 (pro HTTP) nebo 443 (pro HTTPS).
- Prohlížeč odešle HTTP požadavek, který obsahuje metodu (GET, POST atd.), cestu k požadovanému zdroji, verzi protokolu, hlavičky (User-Agent, Accept, Cookie atd.) a případně tělo požadavku (pro POST).
- Server požadavek přijme.
- Webový server (například Nginx, Apache) požadavek přijme a, pokud je nakonfigurován, předá jej Ruby aplikaci (například přes Rack, Passenger, Unicorn).
- Ruby aplikace požadavek zpracuje. To zahrnuje:
- Směrování požadavku na odpovídající kontroler a akci na základě cesty a metody.
- Extrakci parametrů z URL, hlaviček a těla požadavku.
- Provádění logiky aplikace (například práce s databází, výpočty).
- Přípravu odpovědi.
- Ruby aplikace vytvoří HTTP odpověď. Ta obsahuje:
- Stavový kód (například 200 OK, 404 Not Found, 500 Internal Server Error).
- Hlavičky odpovědi (Content-Type, Content-Length, Set-Cookie atd.).
- Tělo odpovědi (HTML, JSON, XML atd.).
- Ruby aplikace odešle odpověď zpět webovému serveru.
- Webový server odešle odpověď klientovi (prohlížeči).
- Prohlížeč přijme odpověď, analyzuje ji, vykreslí získaná data (pokud je to HTML) a zpracuje další požadavky (například na CSS, JS, obrázky).
- TCP spojení může být uzavřeno nebo udržováno pro další požadavky (Keep-Alive).
# Příklad základního routování v Rails
# config/routes.rb
Rails.application.routes.draw do
root 'welcome#index' # Směrování kořenové URL na kontroler welcome, akci index
get 'users/:id', to: 'users#show' # Směrování GET /users/:id na kontroler users, akci show
end
# Příklad kontroleru v Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id]) # Získání parametru :id z URL a hledání uživatele
# Render @user (obvykle přes šablonu view)
rescue ActiveRecord::RecordNotFound
render file: "#{Rails.root}/public/404.html", status: :not_found # Ošetření případu nenalezení uživatele
end
end