Middle
Co się dzieje po otrzymaniu DNS i wysłaniu zapytania do naszego serwisu?
sobes.tech AI
Odpowiedź od AI
- Przeglądarka nawiązuje połączenie TCP z serwerem na porcie 80 (dla HTTP) lub 443 (dla HTTPS).
- 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).
- Serwer odbiera żądanie.
- Serwer WWW (np. Nginx, Apache) akceptuje żądanie i, jeśli jest skonfigurowany, przekazuje je do aplikacji Ruby (np. przez Rack, Passenger, Unicorn).
- 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.
- 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.).
- Aplikacja Ruby wysyła odpowiedź z powrotem do serwera webowego.
- Serwer webowy wysyła odpowiedź do klienta (przeglądarki).
- Przeglądarka odbiera odpowiedź, analizuje ją, renderuje otrzymane dane (jeśli to HTML) i obsługuje dodatkowe żądania (np. dla CSS, JS, obrazów).
- 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