Sobes.tech
Middle

Wat gebeurt er nadat we de DNS hebben ontvangen en het verzoek naar onze service hebben gestuurd?

sobes.tech AI

Antwoord van AI

  1. De browser maakt een TCP-verbinding met de server op poort 80 (voor HTTP) of 443 (voor HTTPS).
  2. 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.
  3. De server ontvangt het verzoek.
  4. De webserver (bijvoorbeeld Nginx, Apache) accepteert het verzoek en geeft het, indien geconfigureerd, door aan de Ruby-toepassing (bijvoorbeeld via Rack, Passenger, Unicorn).
  5. 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.
  6. 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.).
  7. De Ruby-toepassing stuurt het antwoord terug naar de webserver.
  8. De webserver stuurt het antwoord naar de client (browser).
  9. De browser ontvangt het antwoord, analyseert het, rendert de ontvangen gegevens (als het HTML is) en verwerkt aanvullende verzoeken (bijvoorbeeld voor CSS, JS, afbeeldingen).
  10. 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