Middle
Kas notiek pēc tam, kad mēs saņemam DNS un nosūtām pieprasījumu mūsu pakalpojumam?
sobes.tech AI
Atbilde no AI
- Pārlūkprogramma izveido TCP savienojumu ar serveri, izmantojot 80 portu (HTTP) vai 443 portu (HTTPS).
- Pārlūkprogramma nosūta HTTP pieprasījumu, kas ietver metodi (GET, POST utt.), pieprasāmā resursa ceļu, protokola versiju, galvenes (User-Agent, Accept, Cookie utt.) un, iespējams, pieprasījuma ķermeni (POST).
- Serveris saņem pieprasījumu.
- Tīmekļa serveris (piemēram, Nginx, Apache) pieņem pieprasījumu un, ja tas ir konfigurēts, pārsūta to Ruby lietojumprogrammai (piemēram, caur Rack, Passenger, Unicorn).
- Ruby lietojumprogramma apstrādā pieprasījumu. Tas ietver:
- Pieprasījuma maršrutēšanu uz atbilstošo kontrolieri un darbību pēc ceļa un metodes;
- Parametru iegūšanu no URL, galvenēm un ķermeņa;
- Lietojumprogrammas loģikas izpildi (piemēram, datu bāzes mijiedarbību, aprēķinus);
- Atbildes sagatavošanu.
- Ruby lietojumprogramma veido HTTP atbildi. Tā ietver:
- Statusa kodu (piemēram, 200 OK, 404 Not Found, 500 Internal Server Error);
- Atbildes galvenes (Content-Type, Content-Length, Set-Cookie utt.);
- Atbildes ķermeni (HTML, JSON, XML utt.).
- Ruby lietojumprogramma nosūta atbildi atpakaļ tīmekļa serverim.
- Tīmekļa serveris nosūta atbildi klientam (pārlūkprogrammai).
- Pārlūkprogramma saņem atbildi, analizē to, attēlo saņemtos datus (ja tas ir HTML) un apstrādā papildu pieprasījumus (piemēram, CSS, JS, attēli).
- TCP savienojums var tikt slēgts vai saglabāts nākamajiem pieprasījumiem (Keep-Alive).
# Piemērs pamata maršrutēšanai Rails
# config/routes.rb
Rails.application.routes.draw do
root 'welcome#index' # Galvenais URL maršrutē uz welcome kontrolieri, index darbību
get 'users/:id', to: 'users#show' # GET /users/:id maršrutē uz users kontrolieri, show darbību
end
# Kontroliera piemērs Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id]) # Iegūt :id parametru no URL un meklēt lietotāju
# Rādīt @user (parasti caur skatu šablonu)
rescue ActiveRecord::RecordNotFound
render file: "#{Rails.root}/public/404.html", status: :not_found # Ja lietotājs nav atrasts
end
end