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