Sobes.tech
Middle

O que acontece após recebermos o DNS e enviarmos a solicitação ao nosso serviço?

sobes.tech IA

Resposta da IA

  1. O navegador estabelece uma conexão TCP com o servidor na porta 80 (para HTTP) ou 443 (para HTTPS).
  2. O navegador envia uma solicitação HTTP, contendo o método (GET, POST, etc.), o caminho para o recurso solicitado, a versão do protocolo, os cabeçalhos (User-Agent, Accept, Cookie, etc.) e, possivelmente, o corpo da solicitação (para POST).
  3. O servidor recebe a solicitação.
  4. O servidor web (por exemplo, Nginx, Apache) aceita a solicitação e, se configurado, a passa para a aplicação Ruby (por exemplo, via Rack, Passenger, Unicorn).
  5. A aplicação Ruby processa a solicitação. Isso inclui:
    • Roteamento da solicitação para o controlador e ação correspondentes com base no caminho e método.
    • Extração de parâmetros da URL, cabeçalhos e corpo da solicitação.
    • Execução da lógica da aplicação (por exemplo, interação com o banco de dados, cálculos).
    • Preparação da resposta.
  6. A aplicação Ruby gera uma resposta HTTP. Ela inclui:
    • Código de status (por exemplo, 200 OK, 404 Not Found, 500 Internal Server Error).
    • Cabeçalhos de resposta (Content-Type, Content-Length, Set-Cookie, etc.).
    • Corpo da resposta (HTML, JSON, XML, etc.).
  7. A aplicação Ruby envia a resposta de volta ao servidor web.
  8. O servidor web envia a resposta ao cliente (navegador).
  9. O navegador recebe a resposta, analisa, renderiza os dados recebidos (se for HTML) e processa solicitações adicionais (por exemplo, para CSS, JS, imagens).
  10. A conexão TCP pode ser fechada ou mantida para solicitações subsequentes (Keep-Alive).
# Exemplo de roteamento básico em Rails
# config/routes.rb
Rails.application.routes.draw do
  root 'welcome#index' # Roteamento da URL raiz para o controlador welcome, ação index
  get 'users/:id', to: 'users#show' # Roteamento GET /users/:id para o controlador users, ação show
end

# Exemplo de controlador em Rails
# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id]) # Obtenção do parâmetro :id da URL e busca do usuário
    # Renderizar @user (normalmente através de um template de visualização)
  rescue ActiveRecord::RecordNotFound
    render file: "#{Rails.root}/public/404.html", status: :not_found # Tratamento do caso de usuário não encontrado
  end
end