Sobes.tech
Middle

What happens after we receive DNS and send a request to our service?

sobes.tech AI

Answer from AI

  1. The browser establishes a TCP connection with the server on port 80 (for HTTP) or 443 (for HTTPS).
  2. The browser sends an HTTP request, which includes the method (GET, POST, etc.), the path to the requested resource, the protocol version, headers (User-Agent, Accept, Cookie, etc.), and possibly a request body (for POST).
  3. The server receives the request.
  4. The web server (e.g., Nginx, Apache) accepts the request and, if configured, forwards it to a Ruby application (e.g., via Rack, Passenger, Unicorn).
  5. The Ruby application processes the request. This includes:
    • Routing the request to the appropriate controller and action based on the path and method.
    • Extracting parameters from the URL, headers, and request body.
    • Executing application logic (e.g., interacting with a database, calculations).
    • Preparing a response.
  6. The Ruby application generates an HTTP response. It includes:
    • Status code (e.g., 200 OK, 404 Not Found, 500 Internal Server Error).
    • Response headers (Content-Type, Content-Length, Set-Cookie, etc.).
    • Response body (HTML, JSON, XML, etc.).
  7. The Ruby application sends the response back to the web server.
  8. The web server sends the response to the client (browser).
  9. The browser receives the response, analyzes it, renders the received data (if HTML), and handles additional requests (e.g., for CSS, JS, images).
  10. The TCP connection may be closed or kept alive for subsequent requests (Keep-Alive).
# Basic routing example in Rails
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Routes the root URL to the welcome controller, index action
  get 'users/:id', to: 'users#show' # Routes GET /users/:id to the users controller, show action
end

# Example controller in Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Retrieves the :id parameter from URL and finds the user
    # Render @user (usually via view template)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Handles user not found case
  end
end