HTTP é a chave para a comunicação na internet. Os métodos do protocolo HTTP permitem que clientes enviem solicitações aos servidores e que os servidores retornem respostas. Todos os sites da World Wide Web utilizam solicitações HTTP, portanto é fundamental entendê-las. Este artigo explora o conceito de solicitações HTTP, sua estrutura, métodos comuns e exemplos práticos — ajudando você a compreender como a web funciona.
Uma solicitação HTTP é uma mensagem em que um cliente — como um navegador — solicita ao host em um servidor um recurso específico. Os clientes usam URLs nas solicitações HTTP para indicar quais recursos desejam acessar.
Cada solicitação HTTP é composta por três partes:
Request Line (linha de solicitação)
Headers (cabeçalhos)
Message Body (corpo da mensagem)
A request line é a primeira linha de uma solicitação HTTP. Ela inicia uma ação no servidor. Indica o método HTTP e a versão do protocolo utilizada. Além disso, inclui uma URI ou URL.
Exemplo de Request Line:
GET /index.html HTTP/1.1
Os cabeçalhos vêm logo após a request line e fornecem informações adicionais do cliente ao servidor. Eles incluem dados como host, user agent, preferências de idioma, codificação e muito mais.
O servidor usa essas informações para identificar o navegador e o sistema operacional do cliente. Os headers HTTP são case-sensitive e possuem o formato Nome: Valor.
Exemplo de cabeçalhos HTTP:
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
O corpo da mensagem é usado para enviar dados ao servidor. Ele é opcional — nem todas as solicitações HTTP o possuem. Requests com corpo de mensagem geralmente usam POST. O servidor usa o body para processar os dados enviados.
Uma solicitação HTTP conecta um cliente ao servidor por diferentes razões:
recuperar um recurso
enviar dados
atualizar informações
excluir recursos
Aqui estão os métodos mais usados:
O método GET solicita dados ao servidor. Sempre que um usuário acessa uma página, o navegador faz uma solicitação GET para obter seu conteúdo.
Características do GET:
cacheável
seguro (safe)
idempotente
GET apenas lê dados e não altera nada no servidor.
POST é utilizado quando o cliente precisa enviar informações ao servidor — formulários, uploads, etc.
O body contém os dados enviados. Múltiplas solicitações POST idênticas podem criar vários recursos no servidor.
PUT também envia dados, mas serve para substituir informações existentes.
Diferença:
POST = cria
PUT = atualiza
PUT é idempotente — várias solicitações iguais resultam no mesmo estado.
DELETE instrui o servidor a remover um recurso específico.
Se o recurso for excluído com sucesso, o servidor retorna uma confirmação. DELETE também é idempotente.
Ao responder uma solicitação HTTP, o servidor envia uma HTTP response. Assim como uma solicitação, ela possui três partes:
Status Line
Headers
Body
Mostra:
versão HTTP
código de status
mensagem associada
Podem incluir:
data e hora
tipo de conteúdo (Content-Type)
detalhes do servidor
políticas de cache
É o conteúdo real retornado ao cliente:
HTML
JSON
XML
imagens
arquivos
Os códigos de status HTTP mostram o resultado de uma solicitação. Eles têm três dígitos — o primeiro indica a categoria:
|
Grupo |
Descrição |
|
1xx |
Informacional — processamento continua |
|
2xx |
Sucesso — solicitação concluída |
|
3xx |
Redirecionamento — ação adicional necessária |
|
4xx |
Erro do cliente — problema na solicitação |
|
5xx |
Erro do servidor — falha ao processar |
Headers fornecem informações essenciais para a comunicação entre cliente e servidor.
Indicam qual domínio o servidor está atendendo.
Headers como Cache-Control e Expires controlam por quanto tempo o conteúdo deve ser armazenado.
Set-Cookie e Cookie gerenciam sessões e estados do usuário.
Exemplos importantes:
Authorization — autenticação
Content-Security-Policy — proteção contra XSS
Headers informam se a solicitação teve sucesso ou falhou.
Todos os exemplos usam Python com a biblioteca requests.
import requests
response = requests.get("https://api.example.com/data",
params={"param1": "value1", "param2": "value2"})
print(response.status_code)
print(response.json())
import requests
url = "https://api.example.com/users"
data = {
"username": "newuser",
"email": "newuser@example.com",
"password": "securepassword"
}
response = requests.post(url, json=data)
if response.status_code == 201:
print("User created successfully:", response.json())
else:
print("Error:", response.status_code, response.text)
import requests
url = "https://api.example.com/users/123"
data = {
"username": "updateduser",
"email": "updateduser@example.com"
}
response = requests.put(url, json=data)
if response.status_code == 200:
print("User updated successfully:", response.json())
else:
print("Error:", response.status_code, response.text)
import requests
url = "https://api.example.com/users/123"
response = requests.delete(url)
if response.status_code == 204:
print("User deleted successfully.")
else:
print("Error:", response.status_code, response.text)
As solicitações HTTP desempenham um papel crítico nas interações da web. Portanto, é essencial entender os diferentes métodos e como eles funcionam. Escolher o método certo garante uma comunicação fluida entre cliente e servidor e melhora a eficiência das aplicações web.