Sobes.tech
Middle

Co się dzieje po otrzymaniu DNS i wysłaniu zapytania do naszego serwisu?

sobes.tech AI

Odpowiedź od AI

  1. Przeglądarka nawiązuje połączenie TCP z serwerem na porcie 80 (dla HTTP) lub 443 (dla HTTPS).
  2. Przeglądarka wysyła żądanie HTTP, zawierające metodę (GET, POST itp.), ścieżkę do żądanego zasobu, wersję protokołu, nagłówki (User-Agent, Accept, Cookie itp.) oraz, ewentualnie, ciało żądania (dla POST).
  3. Serwer odbiera żądanie.
  4. Serwer WWW (np. Nginx, Apache) akceptuje żądanie i, jeśli jest skonfigurowany, przekazuje je do aplikacji Ruby (np. przez Rack, Passenger, Unicorn).
  5. Aplikacja Ruby przetwarza żądanie. To obejmuje:
    • Routing żądania do odpowiedniego kontrolera i akcji na podstawie ścieżki i metody.
    • Wydobycie parametrów z URL, nagłówków i ciała żądania.
    • Wykonanie logiki aplikacji (np. interakcja z bazą danych, obliczenia).
    • Przygotowanie odpowiedzi.
  6. Aplikacja Ruby generuje odpowiedź HTTP. Zawiera ona:
    • Kod statusu (np. 200 OK, 404 Not Found, 500 Internal Server Error).
    • Nagłówki odpowiedzi (Content-Type, Content-Length, Set-Cookie itp.).
    • Ciało odpowiedzi (HTML, JSON, XML itp.).
  7. Aplikacja Ruby wysyła odpowiedź z powrotem do serwera webowego.
  8. Serwer webowy wysyła odpowiedź do klienta (przeglądarki).
  9. Przeglądarka odbiera odpowiedź, analizuje ją, renderuje otrzymane dane (jeśli to HTML) i obsługuje dodatkowe żądania (np. dla CSS, JS, obrazów).
  10. Połączenie TCP może zostać zamknięte lub utrzymywane do kolejnych żądań (Keep-Alive).
# Przykład podstawowego routingu w Rails
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Routing głównego URL do kontrolera welcome, akcji index
  get 'users/:id', to: 'users#show' # Routing GET /users/:id do kontrolera users, akcji show
end

# Przykład kontrolera w Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Pobranie parametru :id z URL i wyszukanie użytkownika
    # Render @user (zwykle przez szablon widoku)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Obsługa przypadku nieznalezienia użytkownika
  end
end