Middle
Τι συμβαίνει μετά το που λάβαμε το DNS και στείλαμε το αίτημα στην υπηρεσία μας;
sobes.tech AI
Απάντηση από AI
- Ο περιηγητής δημιουργεί μια σύνδεση TCP με τον διακομιστή στην θύρα 80 (για HTTP) ή 443 (για HTTPS).
- Ο περιηγητής στέλνει ένα αίτημα HTTP, που περιέχει τη μέθοδο (GET, POST κ.λπ.), τη διαδρομή προς τον ζητούμενο πόρο, την έκδοση του πρωτοκόλλου, τις κεφαλίδες (User-Agent, Accept, Cookie κ.λπ.) και, ενδεχομένως, το σώμα του αιτήματος (για POST).
- Ο διακομιστής λαμβάνει το αίτημα.
- Ο web server (π.χ., Nginx, Apache) αποδέχεται το αίτημα και, αν έχει διαμορφωθεί, το προωθεί στην εφαρμογή Ruby (π.χ., μέσω Rack, Passenger, Unicorn).
- Η εφαρμογή Ruby επεξεργάζεται το αίτημα. Αυτό περιλαμβάνει:
- Δρομολόγηση του αιτήματος στον κατάλληλο ελεγκτή και ενέργεια βάσει της διαδρομής και της μεθόδου.
- Εξαγωγή παραμέτρων από το URL, τις κεφαλίδες και το σώμα του αιτήματος.
- Εκτέλεση της λογικής της εφαρμογής (π.χ., αλληλεπίδραση με τη βάση δεδομένων, υπολογισμοί).
- Προετοιμασία της απάντησης.
- Η εφαρμογή Ruby δημιουργεί μια απάντηση HTTP. Αυτή περιλαμβάνει:
- Κωδικό κατάστασης (π.χ., 200 OK, 404 Not Found, 500 Internal Server Error).
- Κεφαλίδες απάντησης (Content-Type, Content-Length, Set-Cookie κ.λπ.).
- Σώμα απάντησης (HTML, JSON, XML κ.λπ.).
- Η εφαρμογή Ruby στέλνει την απάντηση πίσω στον web server.
- Ο web server στέλνει την απάντηση στον πελάτη (περιηγητή).
- Ο περιηγητής λαμβάνει την απάντηση, την αναλύει, αποδίδει τα δεδομένα (αν είναι HTML) και επεξεργάζεται επιπλέον αιτήματα (π.χ., για CSS, JS, εικόνες).
- Η σύνδεση 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