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. Вэб-сервер (напрыклад, 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 адпраўляе адказ назад вэб-серверу.
  8. Вэб-сервер адпраўляе адказ кліенту (браузеру).
  9. Браўзэр атрымлівае адказ, аналізуе яго, рэндарыць атрыманыя даныя (калі гэта HTML) і апрацоўвае дадатковыя запыты (напрыклад, для CSS, JS, малюнкаў).
  10. TCP-злучэнне можа быць закрыта або падтрымлівацца для наступных запытаў (Keep-Alive).
# Прыклад базавага маршрутызацыі ў Rails
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Маршрутызацыя карневага URL на кантролер welcome, дзеянне index
  get 'users/:id', to: 'users#show' # Маршрутызацыя GET /users/:id на кантролер users, дзеянне show
end

# Прыклад кантролера ў Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Атрыманне параметра :id з URL і пошук карыстальніка
    # Відал @user (звычайна праз шаблон views)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Апрацоўка выпадку не знойдзенага карыстальніка
  end
end