Sobes.tech
Middle

Mis juhtub pärast DNS saamist ja päringu saatmist meie teenusele?

sobes.tech AI

Vastus AI-lt

  1. Brauser loob TCP-ühenduse serveriga, kasutades pordid 80 (HTTP) või 443 (HTTPS).
  2. Brauser saadab HTTP-päringu, mis sisaldab meetodit (GET, POST jms), nõutava ressursi teed, protokolli versiooni, päise (User-Agent, Accept, Cookie jms) ning võimalusel päringu keha (POST jaoks).
  3. Server saab päringu.
  4. Veebiserver (näiteks Nginx, Apache) võtab päringu vastu ja kui see on konfigureeritud, edastab selle Ruby rakendusele (näiteks Rack, Passenger, Unicorn).
  5. Ruby rakendus töötleb päringut. See hõlmab:
    • Päringu marsruutimist vastavale kontrollerile ja tegevusele tee ja meetodi alusel;
    • Parameetrite väljavõtmist URL-ist, päistest ja kehast;
    • Rakenduse loogika täitmist (näiteks andmebaasiga suhtlemine, arvutused);
    • Vastuse ettevalmistamist.
  6. Ruby rakendus koostab HTTP-vastuse. See sisaldab:
    • Staatuskoodi (näiteks 200 OK, 404 Not Found, 500 Internal Server Error);
    • Vastuse päiseid (Content-Type, Content-Length, Set-Cookie jms);
    • Vastuse keha (HTML, JSON, XML jms).
  7. Ruby rakendus saadab vastuse tagasi veebiserverile.
  8. Veebiserver saadab vastuse kliendile (brauserile).
  9. Brauser saab vastuse, analüüsib seda, renderdab saadud andmed (kui see on HTML) ning töötleb täiendavaid päringuid (näiteks CSS, JS, pildid).
  10. TCP-ühendus võib sulguda või jääda avatuks järgmisteks päringuteks (Keep-Alive).
# Põhise marsruutimise näide Railsis
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Põhilingi marsruutimine welcome-kontrolleri index-tegevusele
  get 'users/:id', to: 'users#show' # GET /users/:id marsruutimine users-kontrolleri, show-tegevusele
end

# Kontrolleri näide Railsis
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # :id parameetri saamine URL-ist ja kasutaja otsimine
    # @user kuvamine (tavaliselt vaadete malliga)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Kui kasutajat ei leidu
  end
end