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 (обикновено чрез view шаблон)
rescue ActiveRecord::RecordNotFound
render file: "#{Rails.root}/public/404.html", status: :not_found # обработка на случай, когато потребителят не е намерен
end
end