Middle
Wat gebeurt er nadat we de DNS hebben ontvangen en het verzoek naar onze service hebben gestuurd?
sobes.tech AI
Antwoord van AI
- De browser maakt een TCP-verbinding met de server op poort 80 (voor HTTP) of 443 (voor HTTPS).
- De browser stuurt een HTTP-verzoek, dat de methode (GET, POST, etc.), het pad naar de opgevraagde bron, de protocolversie, headers (User-Agent, Accept, Cookie, etc.) en mogelijk de body van het verzoek (voor POST) bevat.
- De server ontvangt het verzoek.
- De webserver (bijvoorbeeld Nginx, Apache) accepteert het verzoek en geeft het, indien geconfigureerd, door aan de Ruby-toepassing (bijvoorbeeld via Rack, Passenger, Unicorn).
- De Ruby-toepassing verwerkt het verzoek. Dit omvat:
- Routing van het verzoek naar de juiste controller en actie op basis van het pad en de methode.
- Extractie van parameters uit URL, headers en body van het verzoek.
- Uitvoering van de toepassingslogica (bijvoorbeeld interactie met de database, berekeningen).
- Voorbereiding van het antwoord.
- De Ruby-toepassing genereert een HTTP-antwoord. Dit bevat:
- Statuscode (bijvoorbeeld 200 OK, 404 Not Found, 500 Internal Server Error).
- Antwoordheaders (Content-Type, Content-Length, Set-Cookie, etc.).
- Antwoordbody (HTML, JSON, XML, etc.).
- De Ruby-toepassing stuurt het antwoord terug naar de webserver.
- De webserver stuurt het antwoord naar de client (browser).
- De browser ontvangt het antwoord, analyseert het, rendert de ontvangen gegevens (als het HTML is) en verwerkt aanvullende verzoeken (bijvoorbeeld voor CSS, JS, afbeeldingen).
- De TCP-verbinding kan worden gesloten of worden onderhouden voor vervolgverzoeken (Keep-Alive).
# Voorbeeld van basis routing in Rails
# config/routes.rb
Rails.application.routes.draw do
root 'welcome#index' # Routing van de root URL naar de welcome controller, index actie
get 'users/:id', to: 'users#show' # Routing GET /users/:id naar de users controller, show actie
end
# Voorbeeld van controller in Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id]) # Ophalen van de :id parameter uit de URL en zoeken van de gebruiker
# Render @user (meestal via view template)
rescue ActiveRecord::RecordNotFound
render file: "#{Rails.root}/public/404.html", status: :not_found # Afhandeling van niet gevonden gebruiker
end
end