Sobes.tech
Middle

Τι συμβαίνει μετά το που λάβαμε το DNS και στείλαμε το αίτημα στην υπηρεσία μας;

sobes.tech AI

Απάντηση από AI

  1. Ο περιηγητής δημιουργεί μια σύνδεση TCP με τον διακομιστή στην θύρα 80 (για HTTP) ή 443 (για HTTPS).
  2. Ο περιηγητής στέλνει ένα αίτημα HTTP, που περιέχει τη μέθοδο (GET, POST κ.λπ.), τη διαδρομή προς τον ζητούμενο πόρο, την έκδοση του πρωτοκόλλου, τις κεφαλίδες (User-Agent, Accept, Cookie κ.λπ.) και, ενδεχομένως, το σώμα του αιτήματος (για POST).
  3. Ο διακομιστής λαμβάνει το αίτημα.
  4. Ο web server (π.χ., Nginx, Apache) αποδέχεται το αίτημα και, αν έχει διαμορφωθεί, το προωθεί στην εφαρμογή Ruby (π.χ., μέσω Rack, Passenger, Unicorn).
  5. Η εφαρμογή Ruby επεξεργάζεται το αίτημα. Αυτό περιλαμβάνει:
    • Δρομολόγηση του αιτήματος στον κατάλληλο ελεγκτή και ενέργεια βάσει της διαδρομής και της μεθόδου.
    • Εξαγωγή παραμέτρων από το URL, τις κεφαλίδες και το σώμα του αιτήματος.
    • Εκτέλεση της λογικής της εφαρμογής (π.χ., αλληλεπίδραση με τη βάση δεδομένων, υπολογισμοί).
    • Προετοιμασία της απάντησης.
  6. Η εφαρμογή Ruby δημιουργεί μια απάντηση HTTP. Αυτή περιλαμβάνει:
    • Κωδικό κατάστασης (π.χ., 200 OK, 404 Not Found, 500 Internal Server Error).
    • Κεφαλίδες απάντησης (Content-Type, Content-Length, Set-Cookie κ.λπ.).
    • Σώμα απάντησης (HTML, JSON, XML κ.λπ.).
  7. Η εφαρμογή Ruby στέλνει την απάντηση πίσω στον web server.
  8. Ο web server στέλνει την απάντηση στον πελάτη (περιηγητή).
  9. Ο περιηγητής λαμβάνει την απάντηση, την αναλύει, αποδίδει τα δεδομένα (αν είναι HTML) και επεξεργάζεται επιπλέον αιτήματα (π.χ., για CSS, JS, εικόνες).
  10. Η σύνδεση TCP μπορεί να κλείσει ή να διατηρηθεί για επόμενα αιτήματα (Keep-Alive).
# Παράδειγμα βασικής δρομολόγησης στο Rails
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Δρομολόγηση του ριζικού URL στον controller welcome, ενέργεια index
  get 'users/:id', to: 'users#show' # Δρομολόγηση GET /users/:id στον controller users, ενέργεια show
end

# Παράδειγμα ελεγκτή στο Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Απόκτηση του παραμέτρου :id από το URL και αναζήτηση χρήστη
    # Απόδοση @user (συνήθως μέσω προτύπου προβολής)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Διαχείριση περιπτώσεων μη εύρεσης χρήστη
  end
end