15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
31.10.2024

Compreendendo Requisições HTTP no Linux: Estrutura, Métodos & Exemplos Práticos

HTTP (Hypertext Transfer Protocol) é a camada de comunicação fundamental da web moderna. Sempre que um navegador carrega uma página, uma chamada de API é feita, ou um servidor busca um recurso remoto, uma solicitação HTTP está no centro dessa interação. Para administradores de sistemas Linux, desenvolvedores e engenheiros DevOps, compreender profundamente como as solicitações HTTP são estruturadas, quais métodos usar e como criá-las ou analisá-las a partir da linha de comando não é apenas útil — é essencial.

Este guia abrangente decompõe a anatomia de uma solicitação HTTP, explica todos os principais métodos HTTP com exemplos do mundo real e o guia através das ferramentas Linux mais poderosas disponíveis para enviar, depurar e analisar tráfego HTTP. Se você gerencia um ambiente de VPS Hosting, executa aplicações web em um servidor dedicado ou está simplesmente aprendendo os fundamentos da comunicação web, este artigo aguçará sua base técnica.

O que é uma Solicitação HTTP?

Uma solicitação HTTP é uma mensagem enviada por um cliente (como um navegador web, um aplicativo móvel ou uma ferramenta de linha de comando) para um servidor, pedindo-lhe para executar uma ação específica em um recurso. O servidor então processa a solicitação e retorna uma resposta HTTP.

Esta troca cliente-servidor é governada pela especificação HTTP, atualmente mais amplamente implantada como HTTP/1.1 e HTTP/2, com HTTP/3 (baseado em QUIC) ganhando adoção rápida.

Anatomia de uma Solicitação HTTP

Toda solicitação HTTP é composta por três partes principais: a linha de solicitação, cabeçalhos e um corpo de mensagem opcional. Compreender cada componente é crítico para depurar problemas, construir APIs e configurar servidores web corretamente.

1. A Linha de Solicitação

A linha de solicitação é sempre a primeira linha de uma solicitação HTTP. Contém três elementos separados por espaços:

  • Método HTTP — a ação a ser executada (por exemplo, GET, POST, DELETE)
  • Request-URI — o caminho para o recurso de destino (por exemplo, /index.html ou /api/users)
  • Versão HTTP — a versão do protocolo sendo usada (por exemplo, HTTP/1.1)

Exemplo:

GET /index.html HTTP/1.1

2. Cabeçalhos de Solicitação

Os cabeçalhos carregam metadados sobre a solicitação. Eles informam ao servidor sobre as capacidades do cliente, o formato dos dados sendo enviados, credenciais de autenticação, preferências de cache e muito mais. Cada cabeçalho é um par chave-valor separado por dois pontos.

Cabeçalhos comuns e seus propósitos:

CabeçalhoPropósito
HostEspecifica o nome de domínio do servidor
User-AgentIdentifica o software cliente fazendo a solicitação
AcceptInforma ao servidor quais tipos de conteúdo o cliente pode manipular
Content-TypeDescreve o formato do corpo da solicitação
Content-LengthIndica o tamanho do corpo da solicitação em bytes
AuthorizationCarrega credenciais de autenticação
Accept-EncodingLista algoritmos de compressão que o cliente suporta
ConnectionControla se a conexão permanece aberta após a solicitação

Exemplo de cabeçalhos:

Host: www.example.com
User-Agent: Mozilla/5.0 (Linux; Android 10; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Mobile Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

3. O Corpo da Solicitação

Nem todas as solicitações HTTP incluem um corpo. Métodos como GET e DELETE normalmente não carregam um corpo. Métodos como POST, PUT e PATCH usam o corpo para transmitir dados ao servidor — por exemplo, envios de formulários, cargas JSON ou uploads de arquivos.

Exemplo Completo de Solicitação HTTP

Abaixo está uma solicitação HTTP completa e realista para um endpoint de login que aceita credenciais JSON:

POST /login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Linux; Android 10; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Mobile Safari/537.36
Content-Type: application/json
Content-Length: 57
Accept: application/json
Connection: keep-alive

{
  "username": "exampleUser",
  "password": "examplePassword"
}

Decompondo isto:

  • POST /login HTTP/1.1 — a linha de solicitação
  • O bloco de pares chave-valor — os cabeçalhos de solicitação
  • O objeto JSON na parte inferior — o corpo da solicitação

Métodos HTTP Explicados

HTTP define um conjunto de métodos de solicitação (também chamados de verbos HTTP) que indicam a ação desejada a ser executada no recurso identificado. Cada método tem semântica específica, garantias de segurança e características de idempotência que você deve compreender ao projetar ou consumir APIs.

GET — Recuperar um Recurso

Propósito: Buscar dados do servidor sem modificá-los.

Características:

  • Seguro — não altera o estado do servidor
  • Idempotente — chamá-lo várias vezes produz o mesmo resultado
  • Os parâmetros são passados via string de consulta da URL
  • Nunca deve ser usado para enviar dados sensíveis

Exemplo:

GET /api/users?id=123 HTTP/1.1
Host: api.example.com
Accept: application/json

Casos de uso: Carregamento de páginas web, busca de dados de API, recuperação de arquivos.

POST — Enviar Dados para o Servidor

Propósito: Enviar dados ao servidor para criar um novo recurso ou disparar um processo.

Características:

  • Não idempotente — enviar a mesma solicitação duas vezes pode criar registros duplicados
  • Os dados são enviados no corpo da solicitação
  • Comumente usado para envios de formulários e criação de recursos de API

Exemplo:

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 51

{
  "name": "John Doe",
  "email": "john@example.com"
}

Casos de uso: Registro de usuário, formulários de login, criação de registros, uploads de arquivos.

PUT — Substituir ou Criar um Recurso

Propósito: Substituir completamente um recurso existente, ou criá-lo se ainda não existir, no URI especificado.

Características:

  • Idempotente — enviar a mesma solicitação PUT várias vezes sempre resulta no mesmo estado de recurso
  • Substitui o recurso inteiro (diferentemente de PATCH, que é parcial)

Exemplo:

PUT /api/users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 52

{
  "name": "Jane Doe",
  "email": "jane@example.com"
}

Casos de uso: Atualização de perfil de usuário, substituição de arquivo de configuração via API.

DELETE — Remover um Recurso

Propósito: Deletar o recurso especificado do servidor.

Características:

  • Idempotente — deletar um recurso que não existe mais ainda retorna uma resposta bem-sucedida (ou 404) sem efeitos colaterais adicionais
  • Normalmente não carrega corpo de solicitação

Exemplo:

DELETE /api/users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Casos de uso: Remoção de contas de usuário, exclusão de registros, limpeza de recursos.

PATCH — Atualizar Parcialmente um Recurso

Propósito: Aplicar modificações parciais a um recurso existente, atualizando apenas os campos especificados.

Características:

  • Não necessariamente idempotente — dependendo da implementação, chamadas repetidas podem ter efeitos diferentes
  • Mais eficiente em largura de banda do que PUT para pequenas atualizações

Exemplo:

PATCH /api/users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 34

{
  "email": "jane.doe@example.com"
}

Casos de uso: Atualização de um único campo (por exemplo, endereço de email), alternância de um sinalizador de status.

Outros Métodos HTTP Notáveis

MétodoPropósito
HEADO mesmo que GET mas retorna apenas cabeçalhos, sem corpo — útil para verificar existência de recurso ou metadados
OPTIONSRetorna os métodos HTTP suportados pelo servidor para uma URL específica — usado em solicitações de pré-voo CORS
CONNECTEstabelece um túnel para o servidor (usado para HTTPS via proxies)
TRACEEcoa a solicitação recebida de volta para o cliente — principalmente para fins de diagnóstico

Fazendo Solicitações HTTP no Linux: Ferramentas e Exemplos

Linux oferece um ecossistema rico de ferramentas de linha de comando para criar, enviar e analisar solicitações HTTP. Aqui estão as mais importantes que todo administrador e desenvolvedor deve conhecer.

1. curl — A Ferramenta Suíça de Múltiplos Usos para HTTP

curl é a ferramenta de linha de comando mais amplamente usada para transferir dados sobre HTTP, HTTPS, FTP e dezenas de outros protocolos. Está pré-instalada em praticamente todas as distribuições Linux e é indispensável para testes de API, scripts e automação.

Solicitação GET básica:

curl -X GET https://api.example.com/users

Solicitação GET com saída detalhada (mostra cabeçalhos):

curl -v https://api.example.com/users

Solicitação POST com corpo JSON:

curl -X POST https://api.example.com/users 
  -H "Content-Type: application/json" 
  -d '{"name": "John Doe", "email": "john@example.com"}'

Solicitação PUT para atualizar um recurso:

curl -X PUT https://api.example.com/users/123 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer YOUR_TOKEN" 
  -d '{"name": "Jane Doe", "email": "jane@example.com"}'

Solicitação DELETE:

curl -X DELETE https://api.example.com/users/123 
  -H "Authorization: Bearer YOUR_TOKEN"

Solicitação PATCH:

curl -X PATCH https://api.example.com/users/123 
  -H "Content-Type: application/json" 
  -d '{"email": "jane.doe@example.com"}'

Salvar resposta em um arquivo:

curl -o output.html https://www.example.com

Seguir redirecionamentos automaticamente:

curl -L https://www.example.com

Principais flags do curl a conhecer:

FlagDescrição
-XEspecifica o método HTTP
-HAdiciona um cabeçalho de solicitação
-dEnvia dados no corpo da solicitação
-oSalva saída em um arquivo
-vAtiva modo detalhado (mostra solicitação/resposta completa)
-IBusca apenas cabeçalhos (solicitação HEAD)
-LSegue redirecionamentos HTTP
-uFornece nome de usuário e senha para autenticação básica
--insecurePula verificação de certificado SSL (use apenas para testes)

2. wget — Baixando Arquivos e Páginas

wget é principalmente projetado para baixar arquivos e espelhar sites. Embora menos versátil que curl para trabalho com API, se destaca em downloads recursivos e retomada de transferências interrompidas.

Baixar um arquivo:

wget https://www.example.com/files/archive.zip

Retomar um download interrompido:

wget -c https://www.example.com/files/large-file.iso

Baixar um arquivo em segundo plano:

wget -b https://www.example.com/files/large-file.iso

Espelhar um site inteiro:

wget --mirror --convert-links --adjust-extension --page-requisites https://www.example.com

Enviar uma solicitação POST com wget:

wget --post-data='{"name":"John"}' 
  --header='Content-Type: application/json' 
  -O response.json 
  https://api.example.com/users

3. HTTPie — Cliente HTTP Amigável para Humanos

HTTPie é um cliente HTTP de linha de comando moderno e amigável ao usuário, projetado para tornar a interação com APIs tão intuitiva quanto possível. Sua sintaxe limpa e saída formatizada e colorida a tornam favorita entre desenvolvedores.

Instalar HTTPie:

# Debian/Ubuntu
sudo apt install httpie

# RHEL/CentOS/Fedora
sudo dnf install httpie

Solicitação GET:

http GET https://api.example.com/users

Solicitação POST com JSON (detecção automática de tipo de conteúdo):

http POST https://api.example.com/users 
  name="John Doe" 
  email="john@example.com"

Solicitação PUT com autenticação:

http PUT https://api.example.com/users/123 
  Authorization:"Bearer YOUR_TOKEN" 
  name="Jane Doe"

Solicitação DELETE:

http DELETE https://api.example.com/users/123 
  Authorization:"Bearer YOUR_TOKEN"

HTTPie formata automaticamente respostas JSON com destaque de sintaxe, tornando muito mais fácil ler respostas de API em comparação com saída bruta de curl.

4. Telnet — Solicitações HTTP Brutas para Aprendizado

Embora não seja prático para uso em produção, telnet é uma excelente ferramenta educacional para entender exatamente como uma solicitação HTTP se parece no nível TCP bruto. Ele se conecta diretamente à porta 80 e permite que você digite solicitações HTTP manualmente.

Conectar a um servidor:

telnet www.example.com 80

Então digite a seguinte solicitação (pressione Enter duas vezes após a última linha):

GET / HTTP/1.1
Host: www.example.com
Connection: close

Você verá a resposta HTTP bruta, incluindo linha de status, cabeçalhos e corpo — exatamente como o servidor a envia. Este exercício é inestimável para compreender o protocolo em um nível fundamental.

> Nota: Para conexões HTTPS, use openssl s_client em vez de telnet, pois telnet não pode manipular criptografia TLS.

Solicitação HTTPS bruta usando OpenSSL:

openssl s_client -connect www.example.com:443 -quiet

Então digite:

GET / HTTP/1.1
Host: www.example.com
Connection: close

5. Python — Scripts de Solicitações HTTP

Para automação e scripts, a biblioteca requests do Python é uma das ferramentas mais populares para fazer solicitações HTTP programaticamente no Linux.

Instalar a biblioteca requests:

pip install requests

Solicitação GET:

import requests

response = requests.get('https://api.example.com/users')
print(response.status_code)
print(response.json())

Solicitação POST:

import requests

payload = {"name": "John Doe", "email": "john@example.com"}
response = requests.post('https://api.example.com/users', json=payload)
print(response.status_code)
print(response.json())

Analisando Tráfego HTTP no Linux

Além de fazer solicitações, Linux fornece ferramentas poderosas para capturar e analisar tráfego HTTP — habilidades essenciais para depuração, ajuste de desempenho e análise de segurança.

tcpdump — Capturar Pacotes de Rede

tcpdump é um analisador de pacotes de linha de comando que captura tráfego de rede bruto. Está disponível em praticamente todos os sistemas Linux e requer privilégios root ou sudo.

Capturar todo tráfego HTTP e HTTPS:

sudo tcpdump -i any -A 'tcp port 80 or tcp port 443'

Capturar tráfego em uma interface específica e salvar em um arquivo:

sudo tcpdump -i eth0 -w capture.pcap 'tcp port 80'

Ler um arquivo de captura salvo:

sudo tcpdump -r capture.pcap

Filtrar tráfego por host:

sudo tcpdump -i any host www.example.com

Wireshark — Análise de Pacotes GUI

Wireshark é o analisador de pacotes gráfico padrão da indústria. Você pode capturar tráfego no seu servidor Linux usando tcpdump e salvá-lo em um arquivo .pcap, depois abri-lo no Wireshark na sua estação de trabalho para análise profunda.

Wireshark permite que você:

  • Reconstrua conversas HTTP completas
  • Filtre tráfego por protocolo, IP, porta ou conteúdo
  • Identifique gargalos de desempenho e erros
  • Detecte padrões de tráfego suspeitos ou maliciosos

ngrep — Network Grep

ngrep combina o poder de tcpdump com correspondência de padrão estilo grep, tornando fácil procurar por strings específicas no tráfego de rede.

Procurar por solicitações HTTP GET:

sudo ngrep -d any 'GET' 'tcp port 80'

Procurar por um host específico no tráfego:

sudo ngrep -d any 'example.com' 'tcp port 80 or tcp port 443'

Códigos de Status HTTP: Compreendendo Respostas do Servidor

Quando um servidor recebe sua solicitação HTTP, ele responde com um código de status que informa se a solicitação foi bem-sucedida, falhou ou requer ação adicional. Compreender esses códigos é essencial para depuração.

Intervalo de CódigoCategoriaExemplos Comuns
1xxInformativo100 Continue, 101 Switching Protocols
2xxSucesso200 OK, 201 Created, 204 No Content
3xxRedirecionamento301 Moved Permanently, 302 Found, 304 Not Modified
4xxErro do Cliente400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5xxErro do Servidor500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

Protegendo Solicitações HTTP: HTTPS e SSL/TLS

Em ambientes de produção, todo tráfego HTTP deve ser criptografado usando HTTPS (HTTP sobre TLS/SSL). Enviar credenciais, tokens de API ou qualquer dado sensível sobre HTTP simples o expõe à interceptação por qualquer pessoa no caminho da rede.

Ao trabalhar com curl, sempre use URLs https://. Se encontrar erros de certificado SSL em desenvolvimento, você pode temporariamente contornar a verificação com --insecure, mas nunca faça isso em produção.

Para verificar o certificado SSL de um servidor a partir da linha de comando:

curl -vI https://www.example.com 2>&1 | grep -A 10 "SSL certificate"

Ou use OpenSSL diretamente:

openssl s_client -connect www.example.com:443 -showcerts

Se você está hospedando aplicações web e precisa protegê-las com um certificado SSL confiável, AlexHost oferece Certificados SSL que são fáceis de instalar e compatíveis com todos os principais servidores web, incluindo Apache, Nginx e LiteSpeed.

Casos de Uso Prático para Ferramentas HTTP do Linux

Monitorando a Saúde do Servidor

Use curl em um trabalho cron ou script de monitoramento para verificar se sua aplicação web está respondendo corretamente:

#!/bin/bash
STATUS=$(curl -o /dev/null -s -w "%{http_code}" https://www.example.com/health)
if [ "$STATUS" != "200" ]; then
  echo "ALERT: Server returned HTTP $STATUS" | mail -s "Health Check Failed" admin@example.com
fi

Testando Endpoints de API Durante o Desenvolvimento

Ao construir ou depurar APIs REST no seu servidor, curl e HTTPie permitem que você teste cada endpoint diretamente do terminal sem precisar de uma ferramenta GUI como Postman.

Automatizando Downloads de Arquivos

Use wget ou curl em scripts shell para automatizar o download de pacotes de software, arquivos de configuração ou backups de servidores remotos.

Depurando Configuração de Servidor Web

Use curl -v para inspecionar os cabeçalhos exatos que seu servidor web está retornando — útil para verificar cabeçalhos CORS, políticas de controle de cache, cabeçalhos de segurança (como Strict-Transport-Security) e comportamento de redirecionamento.

curl -v -I https://www.example.com 2>&1 | grep -E "< (HTTP|Server|X-|Strict|Content)"

Escolhendo o Ambiente de Hospedagem Certo para Desenvolvimento Web

As ferramentas e técnicas abordadas neste guia são mais poderosas quando você tem controle total sobre seu ambiente de servidor. Um plano de VPS Hosting oferece acesso root a um servidor Linux onde você pode instalar qualquer ferramenta, configurar sua pilha de rede e executar scripts personalizados — tornando-o o ambiente ideal para desenvolvedores e administradores de sistemas que trabalham extensivamente com HTTP.

Para equipes que precisam de desempenho máximo e recursos dedicados para aplicações de alto tráfego ou cargas de trabalho de API intensivas, Servidores Dedicados fornecem o poder bruto e isolamento necessários. E se você preferir um ambiente gerenciado com uma interface gráfica, VPS com cPanel oferece a conveniência de um painel de controle enquanto retém a flexibilidade de um servidor privado virtual.

Para projetos que também requerem infraestrutura de email profissional, Hospedagem de Email garante que seus emails transacionais e comerciais sejam entregues de forma confiável, com configurações adequadas de SPF, DKIM e D

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar