Middle
Пас аз DNS-ро гирифтем ва дархостро ба хидматамон фиристодем, чӣ мешавад?
sobes.tech AI
Ҷавоб аз AI
- Браўзэр усталёўвае TCP-злучэнне з серверам на порце 80 (для HTTP) або 443 (для HTTPS).
- Браўзэр адпраўляе HTTP-запыт, які ўтрымлівае метад (GET, POST і г.д.), шлях да запытанага рэсурсу, версію пратаколу, загалоўкі (User-Agent, Accept, Cookie і інш.) і, магчыма, цела запыту (для POST).
- Сервер атрымлівае запыт.
- Вэб-сервер (напрыклад, 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 адпраўляе адказ назад вэб-серверу.
- Вэб-сервер адпраўляе адказ кліенту (браузеру).
- Браўзэр атрымлівае адказ, аналізуе яго, рэндарыць атрыманыя даныя (калі гэта HTML) і апрацоўвае дадатковыя запыты (напрыклад, для CSS, JS, малюнкаў).
- 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