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]) # URL-დან :id პარამეტრის მიღება და მომხმარებლის ძიება
    # @user-ის ჩვენება (ზოგჯერ view-ის ტემპლატით)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # მომხმარებლის არ არსებობის შემთხვევაში
  end
end