O que é HTTP?
A linguagem da web
Toda vez que você visita um site, envia um formulário ou carrega uma imagem, seu navegador está tendo uma conversa com um servidor. Essa conversa segue um conjunto estrito de regras chamado HTTP: HyperText Transfer Protocol (Protocolo de Transferência de Hipertexto).
HTTP é a base de toda troca de dados na web. Sem ele, navegadores não saberiam como pedir páginas, e servidores não saberiam como responder.
Uma analogia simples
Pense no HTTP como pedir comida em um restaurante:
Voce (cliente/navegador): "Eu gostaria da homepage, por favor." → Requisicao HTTP
Garcom (a internet): leva seu pedido para a cozinha
Cozinha (servidor): prepara o prato
Garcom: traz o prato de volta
Voce: recebe a comida ← Resposta HTTP
HTTP é um protocolo de requisição-resposta. O cliente sempre pergunta primeiro, e o servidor sempre responde. O servidor nunca envia dados sem ser solicitado.
HTTP em ação
Quando você digita https://example.com no navegador, aqui está o que acontece no nível HTTP:
1. Navegador cria uma REQUISICAO HTTP:
GET / HTTP/1.1
Host: example.com
2. Servidor processa a requisicao e envia uma RESPOSTA HTTP:
HTTP/1.1 200 OK
Content-Type: text/html
<html><body>Hello, World!</body></html>
3. Navegador le a resposta e renderiza o HTML
E isso. Toda interação web (carregar páginas, enviar formulários, buscar dados de API) segue esse mesmo padrão.
Características chave do HTTP
1. Stateless (sem estado)
HTTP é stateless: cada requisição é completamente independente. O servidor não lembra de requisições anteriores.
Requisicao 1: GET /products → Servidor responde com lista de produtos
Requisicao 2: GET /products/42 → Servidor NAO tem memoria da Requisicao 1
Isso significa que o servidor trata cada requisição como se fosse de um visitante novo. Para manter estado (como "este usuário está logado"), apps web usam cookies e sessões: mas o HTTP em si não rastreia nada.
Por que stateless? Torna servidores mais simples e escalaveis. Qualquer servidor em um cluster pode lidar com qualquer requisição sem precisar saber o que aconteceu antes.
2. Baseado em texto
Mensagens HTTP/1.1 são texto legível por humanos, então você pode ler HTTP bruto (o HTTP/2 e o HTTP/3 mandam as mesmas mensagens em frames binários, e as ferramentas as decodificam para você):
GET /about HTTP/1.1
Host: myapp.com
Accept: text/html
User-Agent: Mozilla/5.0
Isso torna HTTP fácil de debugar: você pode inspecionar o que está sendo enviado e recebido.
3. Arquitetura cliente-servidor
HTTP separa claramente os papéis:
sequenceDiagram
participant C as Cliente (navegador)
participant S as Servidor (Rails)
C->>S: requisição
S->>C: resposta
- Cliente inicia requisições (navegadores, apps móveis,
curl, clientes API) - Servidor escuta e responde (Rails, Django, Express, etc.)
4. Roda sobre TCP
HTTP roda sobre TCP (Transmission Control Protocol), que você aprendeu no curso de Fundamentos da Internet. TCP garante que mensagens HTTP cheguem completas, em ordem e sem corrupção. (O HTTP/3 é a exceção: ele roda sobre QUIC, em UDP.)
Camada de Aplicacao: HTTP (sua requisicao web)
Camada de Transporte: TCP (entrega confiavel)
Camada de Rede: IP (roteamento pela internet)
A anatomia de uma URL no HTTP
requisições HTTP miram um recurso específico identificado por uma URL:
https://myapp.com:443/courses/ruby-basics?page=2#overview
│ │ │ │ │ │
schema host porta caminho query fragmento
| Parte | Propósito | Exemplo |
|---|---|---|
| Schema | Protocolo a usar | http:// ou https:// |
| Host | Servidor para conectar | myapp.com |
| Porta | Porta do servidor (padrão: 80/443) | :443 |
| Caminho | Qual recurso requisitar | /courses/ruby-basics |
| Query | Parâmetros adicionais | ?page=2 |
| Fragmento | Âncora client-side (Não enviada ao servidor) | #overview |
Importante: O fragmento (
#overview) nunca é enviado ao servidor. E usado apenas pelo navegador para rolar até uma seção da página.
Métodos HTTP (verbos): uma prévia
HTTP define vários métodos (também chamados verbos) que dizem ao servidor qual ação realizar:
| Método | Propósito | Exemplo |
|---|---|---|
| GET | Recuperar dados | Ver uma página web |
| POST | Criar dados | Enviar um formulário |
| PUT | Substituir dados inteiramente | Atualizar um registro completo |
| PATCH | Atualizar dados parcialmente | Mudar um campo |
| DELETE | Remover dados | Deletar um registro |
você vai estudar cada verbo em profundidade nos próximos cursos. Por agora, saiba que GET e POST representam a grande maioria do tráfego web.
Códigos de status HTTP: uma prévia
Toda resposta HTTP inclui um código de status: um número de três dígitos indicando o resultado:
| Faixa | Significado | Exemplo |
|---|---|---|
| 1xx | Informacional | 100 Continue |
| 2xx | Sucesso | 200 OK |
| 3xx | Redirecionamento | 301 Moved Permanently |
| 4xx | Erro do Cliente | 404 Not Found |
| 5xx | Erro do Servidor | 500 Internal Server Error |
você vai estudar códigos de status específicos em detalhes depois. Por ora, guarde isto: o primeiro dígito diz a categoria da resposta.
HTTP e Rails
Rails é fundamentalmente um framework HTTP. Quando você cria uma aplicação Rails, está construindo um programa que:
- Recebe requisições HTTP (via servidor web como Puma)
- Roteia para a action correta do controller
- Processa a requisição (consulta banco, executa lógica de negócio)
- Retorna uma resposta HTTP (HTML, JSON, redirect, etc.)
Navegador: GET /courses HTTP/1.1
Host: myapp.com
↓
Rails: routes.rb → CoursesController#index
→ consulta banco de dados
→ renderiza view
↓
Navegador: HTTP/1.1 200 OK
Content-Type: text/html
<html>...lista de cursos...</html>
Todo conceito Rails (rotas, controllers, views, redirects, envio de formulários) mapeia diretamente para conceitos HTTP. Entender HTTP é entender como Rails pensa.
Resumo
| Conceito | Ponto Chave |
|---|---|
| HTTP | HyperText Transfer Protocol: a linguagem que navegadores e servidores falam |
| Requisição-Resposta | Cliente pergunta, servidor responde: sempre nessa ordem |
| Stateless | Cada requisição é independente: servidor não lembra das anteriores |
| Baseado em Texto | Mensagens HTTP são legíveis por humanos: fácil de debugar |
| Cliente-Servidor | Separação clara: cliente inicia, servidor responde |
| Sobre TCP | HTTP depende do TCP para entrega confiável e ordenada |
| Métodos | GET, POST, PUT, PATCH, DELETE: dizem ao servidor o que fazer |
| Códigos de Status | 2xx sucesso, 3xx redirect, 4xx erro cliente, 5xx erro servidor |
| Rails | Um framework para receber requisições HTTP e retornar respostas HTTP |
Continue com a aula 2
A requisição HTTP
Divide a requisição em linha de requisição, cabeçalhos e corpo, incluindo corpos de formulário, JSON e multipart.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.