Você está vendo esta página porque seu navegador fez uma requisição HTTP e recebeu esta resposta. Legal, né? 😃
Esta página foi criada para ilustrar o funcionamento do Hypertext Transfer Protocol (HTTP), que é a base da comunicação na internet. O HTTP é um protocolo de arquitetura cliente/servidor que opera na camada de aplicação do modelo TCP/IP e segue um modelo de requisição e resposta, no qual o cliente solicita um recurso e o servidor responde com os dados correspondentes.
O HTTP é utilizado para obter recursos, como documentos HTML e outros arquivos. Além disso, compreender esse protocolo é fundamental para desenvolvedores web, pois o HTTP é amplamente utilizado em APIs REST, que permitem a integração e troca de informações entre diferentes sistemas e aplicações na web. A figura abaixo ilustra uma página web, que é composta por diversos arquivos, como é o caso desta página.
Quando você acessa um site, o navegador inicia o processo solicitando ao servidor o arquivo principal da página. Esse arquivo, geralmente em HTML, contém referências a todos os demais elementos que compõem o site, como imagens, folhas de estilo e scripts. Após receber esse arquivo, o navegador interpreta o HTML e começa a renderizar a página. Nesse momento inicial, ele envia ao servidor uma mensagem (HTTP request) seguindo uma estrutura específica, conforme mostrado na imagem abaixo. Essa estrutura específica é a definição do protocolo.
Ao acessar o endereço redes.marcoantoni.com.br,
o navegador enviou uma solicitação HTTP do tipo GET, típica para
requisições de páginas, geralmente usando a versão HTTP/1.1 do
protocolo. Como não foi especificado um nome de arquivo, utiliza-se o
caractere /, que indica ao servidor para retornar o arquivo principal
configurado. Ao receber essa solicitação, o servidor web envia esse arquivo
inicial, definido pelo administrador. Neste exemplo, o arquivo retornado
é home.php. Assim, se você acessar
http://redes.marcoantoni.com.br/index.php ,
verá exatamente a mesma página, pois o arquivo home.php
foi entregue.
Requisição HTTP
No protocolo HTTP, os métodos de requisição definem a ação que o cliente (como um navegador ou aplicativo) deseja que o servidor execute sobre um determinado recurso. Entre os métodos mais comuns, destacam-se:
GET: utilizado para solicitar dados de um recurso específico.
É o método HTTP mais comum, empregado principalmente para carregar
páginas e arquivos. Quando é necessário enviar parâmetros, eles são
incluídos diretamente na URL — seja como parte do caminho
(path parameters) ou após o símbolo ? na sequência
de consulta (query string) — ficando visíveis para o cliente.
Por exemplo:
http://redes.marcoantoni.com.br/index.php?nome=Fulano . Ao acessar essa URL, o parâmetro nome é enviado ao
servidor, que irá exibir o nome do usuário no início da página.
Em APIs REST, o método GET é amplamente empregado para recuperar informações sem alterar dados no servidor, garantindo operações seguras e idempotentes, como no exemplo disponível em http://redes.marcoantoni.com.br/exemplo_assincrono.php .
POST: utilizado para enviar dados ao servidor, geralmente com o objetivo de criar, atualizar ou processar informações. É amplamente empregado em formulários de login, cadastros e envio de arquivos.
Por exemplo, ao acessar a página de login, digitar as credenciais e clicar em "Enviar", os dados são transmitidos no corpo da requisição.
Isso significa que, ao inspecionar o tráfego com uma ferramenta como o Wireshark, é possível visualizar essas informações trafegando dentro do protocolo. Essa característica evidencia a vulnerabilidade do protocolo HTTP em relação à segurança, especialmente quando não é utilizado junto com criptografia (HTTPS).
DELETE: solicita a remoção de um recurso no servidor.
Ao acessar essa página, é possível clicar no botão "Excluir", que envia uma requisição assíncrona ao servidor utilizando o método DELETE para remover um recurso, por exemplo, um usuário.
O servidor então retorna uma resposta indicando sucesso ou falha, e, em caso de sucesso, a linha correspondente ao registro é ocultada na interface — tudo isso sem recarregar a página.
Caso você tente acessar diretamente o arquivo excluir.php pelo navegador, será exibido um erro, pois ele aceita apenas requisições feitas com o método DELETE.
PUT: utilizado para atualizar ou substituir um recurso existente no servidor. Em APIs REST, é empregado quando o cliente deseja enviar ao servidor uma nova representação de um recurso identificado por uma URL específica.
Os dados utilizados para atualizar o recurso são enviados no
corpo da requisição. Por exemplo, para alterar os dados de um
usuário identificado pelo número 15, o cliente pode
enviar uma requisição PUT para
/usuarios/15.
Diferentemente do método GET, que normalmente apenas consulta informações, o PUT pode modificar os dados armazenados no servidor. Também é diferente do POST, que normalmente é utilizado para criar um novo recurso ou solicitar o processamento de dados.
Uma característica importante do método PUT é que ele é
idempotente. Isso significa que realizar a mesma requisição
várias vezes deve produzir o mesmo resultado final no recurso.
Por exemplo, enviar várias vezes os mesmos dados para
/usuarios/15 fará com que o usuário permaneça com
os mesmos dados.
Atualmente, as versões mais relevantes do protocolo HTTP são:
- HTTP/1.1: introduziu conexões persistentes, permitindo múltiplas requisições pela mesma conexão sem precisar reabri-la a cada vez. Também trouxe suporte a cache, compressão e mais métodos de requisição, tornando-se o padrão da web por décadas.
- HTTP/2: focado em desempenho, permite multiplexar várias requisições e respostas no mesmo canal, reduzindo a latência. Além disso, comprime cabeçalhos e permite priorizar recursos importantes para o carregamento da página.
- HTTP/3: baseado no protocolo QUIC (sobre UDP), melhora ainda mais a velocidade e a confiabilidade, especialmente em conexões móveis ou instáveis. Possui criptografia integrada por padrão, aumentando a segurança.
Cada nova versão mantém compatibilidade com recursos anteriores, mas otimiza a performance e a segurança para acompanhar as demandas modernas da internet.
Na prática, o método escolhido orienta o servidor sobre a ação a ser executada com o recurso solicitado. Por exemplo, ao acessar um site digitando seu endereço no navegador, normalmente é feita uma requisição GET usando uma das versões do protocolo HTTP suportadas pelo cliente e pelo servidor.
Resposta HTTP
No protocolo HTTP, após cada requisição, o servidor envia uma mensagem de resposta, que inclui um código numérico que indica o resultado da requisição. Esses códigos, conhecidos como status codes, informam ao cliente o resultado da operação. Os códigos são organizados de maneira hierarquica: 2xx indicam sucesso, 3xx indicam redirecionamentos, 4xx indicam erros relacionados à requisição do cliente e 5xx indicam erros ocorridos no servidor. Alguns dos códigos são:
200 - OK: indica que a requisição foi processada com sucesso. O significado exato depende do método utilizado e da operação realizada. Por exemplo, em uma requisição GET, pode indicar que o recurso solicitado foi encontrado e retornado. Em uma requisição POST, pode indicar que a operação foi processada com sucesso e que o servidor está retornando uma resposta. Da mesma forma, PUT e DELETE também podem resultar em uma resposta 200 - OK.
302 - Found: indica que o recurso solicitado está disponível temporariamente em outra URL. Ao acessar o recurso original, o servidor
informa ao cliente que ele deve ser redirecionado para outro endereço. Exemplo: o arquivo
http://redes.marcoantoni.com.br/exemplo_302.php
existe no servidor, mas, ao ser acessado, o servidor responde com um redirecionamento HTTP 302 para o site https://duckduckgo.com/.
400 - Bad Request: indica que o servidor não pôde processar a requisição porque ela possui dados ou uma estrutura inválida. O problema está na própria requisição enviada pelo cliente. Exemplo: uma API espera um parâmetro numérico, mas recebe um texto que não pode ser interpretado como número.
401 - Unauthorized: indica que a requisição exige autenticação e o cliente não forneceu credenciais válidas. Exemplo: acessar uma API protegida sem enviar um token de autenticação válido.
403 - Forbidden: indica que o servidor entendeu a requisição, mas se recusa a permitir o acesso ao recurso. O cliente pode estar autenticado, mas não possui permissão suficiente para realizar aquela operação. Exemplo: um usuário autenticado tenta excluir um recurso que somente administradores podem excluir.
404 - Not Found: significa que o servidor não encontrou
o recurso solicitado. O recurso pode não existir ou a URL utilizada
pode estar incorreta.
Exemplo: acessar
http://redes.marcoantoni.com.br/sobre.php
quando o arquivo ou recurso não existe no servidor.
5x - Erros do lado do servidor: códigos 5xx indicam problemas ocorridos no lado do servidor. Exemplo: um erro inesperado no código PHP ou uma falha durante o processamento de uma operação faz o servidor retornar