Sobes.tech
Middle

Kas vyksta po to, kai gauname DNS ir siunčiame užklausą mūsų paslaugai?

sobes.tech AI

Atsakymas iš AI

  1. Naršyklė nustato TCP ryšį su serveriu naudodama 80 prievadą (HTTP) arba 443 prievadą (HTTPS).
  2. Naršyklė siunčia HTTP užklausą, kuri apima metodą (GET, POST ir kt.), prašomo ištekliaus kelią, protokolo versiją, antraštes (User-Agent, Accept, Cookie ir kt.) ir, galbūt, užklausos kūną (POST).
  3. Serveris gauna užklausą.
  4. Žiniatinklio serveris (pvz., Nginx, Apache) priima užklausą ir, jei sukonfigūruotas, perduoda ją Ruby programai (pvz., per Rack, Passenger, Unicorn).
  5. Ruby programa apdoroja užklausą. Tai apima:
    • Užklausos maršrutizaciją į atitinkamą kontrolerį ir veiksmą pagal kelią ir metodą;
    • Parametrų išgavimą iš URL, antraščių ir kūno;
    • Programos logikos vykdymą (pvz., duomenų bazės sąveiką, skaičiavimus);
    • Atsakymo paruošimą.
  6. Ruby programa sukuria HTTP atsakymą. Jame yra:
    • Statuso kodas (pvz., 200 OK, 404 Not Found, 500 Internal Server Error);
    • Atsakymo antraštės (Content-Type, Content-Length, Set-Cookie ir kt.);
    • Atsakymo kūnas (HTML, JSON, XML ir kt.).
  7. Ruby programa grąžina atsakymą atgal žiniatinklio serveriui.
  8. Žiniatinklio serveris siunčia atsakymą klientui (naršyklei).
  9. Naršyklė gauna atsakymą, analizuoja jį, atvaizduoja gautus duomenis (jei tai HTML) ir apdoroja papildomus užklausimus (pvz., CSS, JS, paveikslėlius).
  10. TCP ryšys gali būti uždaromas arba palaikomas tolimesniems užklausimams (Keep-Alive).
# Pagrindinio maršrutizavimo pavyzdys Rails
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Pagrindinis URL nukreipia į welcome kontrolerį, index veiksmą
  get 'users/:id', to: 'users#show' # GET /users/:id maršrutizacija į users kontrolerį, show veiksmą
end

# Kontrolerio pavyzdys Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Gauti :id parametrą iš URL ir ieškoti naudotojo
    # Rodyti @user (dažniausiai per vaizdo šabloną)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Jei naudotojas nerandamas
  end
end