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