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

  1. Prohlížeč naváže TCP spojení se serverem na portu 80 (pro HTTP) nebo 443 (pro HTTPS).
  2. 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).
  3. Server požadavek přijme.
  4. 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).
  5. 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.
  6. 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.).
  7. Ruby aplikace odešle odpověď zpět webovému serveru.
  8. Webový server odešle odpověď klientovi (prohlížeči).
  9. 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).
  10. 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