DEV Community

Cover image for Protocolo HTTP

Protocolo HTTP

Definições Relacionadas

- Protocolo: Conjunto de regras e convenções que define como a comunicação deve ocorrer entre sistemas. Um protocolo estabelece as directrizes para a troca de informações entre dispositivos.
- Word Wide Web: Sistema de informações interconectado na internet que permite o acesso a documentos, imagens, vídeos e outros recursos por meio de navegadores web.
- HTTP: Sigla para Hypertext Transfer Protocol, ou Protocolo de Transferência de Hipertexto em português. É um protocolo utilizado para transferir dados na World Wide Web.
- Hipertexto: Sistema de organização de informações que permite a navegação não linear através de documentos interconectados.
- Hipermídia: Ampliação do conceito de hipertexto, além de texto, inclui também outros elementos de mídia, como gráficos, áudio, vídeo e outros formatos multimedia.
- Cliente HTTP: Software que envia solicitações HTTP a servidores para recuperar e exibir conteúdo web. É o ponto de origem para solicitar recursos de um servidor HTTP.
- Servidor HTTP: Software que recebe e processa solicitações HTTP de clientes, fornecendo recursos, como páginas web, imagens ou documentos, em resposta a essas solicitações.
- TCP: Sigla para Transmission Control Protocol, ou Protocolo de Controle de Transmissão em português. É um protocolo que garante a entrega de dados de forma confiável e ordenada entre dispositivos em uma rede.

Conceito

O HTTP é um protocolo de comunicação utilizado para sistemas de informação de hipermídia, distribuídos e colaborativos. Ele é a base para a comunicação de dados da World Wide Web.
O protocolo HTTP tem como objetivo permitir a comunicação entre clientes (geralmente navegadores web) e servidores, possibilitando o acesso e a transferência de recursos, como páginas HTML, imagens, vídeos, entre outros, pela internet.
O HTTP é fundamental para o funcionamento da World Wide Web, sendo a base para a comunicação entre navegadores e servidores, permitindo o acesso e a troca de informações que caracterizam a experiência online que conhecemos hoje.

Origem do HTTP

O HTTP foi desenvolvido por Tim Berners-Lee no CERN (Organização Europeia para Pesquisa Nuclear) durante o início da década de 1990.
A primeira versão, HTTP/0.9, foi introduzida em 1991, principalmente como um protocolo simples para transferência de documentos hipertexto na World Wide Web.
O HTTP evoluiu ao longo do tempo com o lançamento de várias versões, sendo a versão HTTP/1.1 a mais amplamente utilizada.
A padronização e evolução do HTTP são gerenciadas pelo IETF (Internet Engineering Task Force) e pelo W3C (World Wide Web Consortium), organizações que desempenham papéis significativos na definição de padrões para a internet e a web.

Características Principais

- Sem estado (Stateless): Cada solicitação entre o cliente e o servidor é tratada independentemente, sem que o servidor retenha informações sobre solicitações anteriores.
- Baseado em Texto: As mensagens HTTP são, em sua essência, texto legível por humanos. Isso facilita a depuração e o desenvolvimento, permitindo que desenvolvedores visualizem facilmente as solicitações e respostas.
- Conexões Persistentes: Capacidade de manter conexões persistentes, permitindo que várias requisições e respostas sejam enviadas pela mesma conexão TCP (introduzida pelo HTTP/1.1).
- Simples: Foi projectado para ser simples e de fácil implementação. Isso facilita a compreensão e implementação tanto para desenvolvedores quanto para sistemas.
- Extensível: É extensível, permitindo a introdução de novas funcionalidades através do acordo entre cliente e servidor utilizando a semântica de cabeçalhos HTTP.

Fluxo de Funcionamento do HTTP

A comunicação entre cliente e servidor no protocolo HTTP segue as etapas a seguir:
1 - Abertura da conexão TCP: Inicia a conexão entre o cliente e o servidor por meio do protocolo TCP.
2 - Envio da Requisição: O cliente envia uma requisição ao servidor contendo as informações necessárias para a solicitação desejada.
3 - Recepção da Requisição: O servidor recebe a requisição do cliente e inicia o processamento para atender à solicitação.
4 - Processamento da Resposta: O servidor processa a requisição, executando as operações necessárias para gerar uma resposta adequada.
5 - Envio da Resposta: Após o processamento, o servidor envia a resposta ao cliente, contendo os dados ou informações solicitados.
6 - Recepção da Resposta: O cliente recebe a resposta do servidor, podendo ser uma página web, um arquivo ou outro conteúdo solicitado.
7 - Fechamento da Conexão TCP: Após a troca de informações, a conexão TCP entre o cliente e o servidor é encerrada.

As imagens abaixo, ilustram o funcionamento do HTTP:

Image description

Image description

Mensagem HTTP

Mensagem HTTP é um pacote de dados transmitido entre o cliente e o servidor usando o HTTP. As mensagens são utilizadas para trocar recursos como páginas web, texto, imagens, vídeos, documentos, etc.
Uma mensagem HTTP é um conjunto estruturado de dados transmitidos entre um cliente e um servidor. Essas mensagens desempenham um papel vital na comunicação online, permitindo a troca eficiente de recursos como páginas web, texto, imagens, vídeos e documentos.
As mensagens HTTP seguem um formato padronizado, sendo compostas por linhas de texto. Cada linha consiste em um campo e um valor, separados por dois pontos (:).
Essa estrutura facilita a interpretação tanto para desenvolvedores quanto para os sistemas envolvidos, proporcionando uma base sólida para a comunicação eficaz na web.

Exemplo de mensagem:

Image description

Tipos de Mensagens HTTP

Existem 2 tipos de mensagens :
- Requisição: Mensagem enviada pelo cliente para solicitar um recurso ao servidor.
- Resposta: Mensagem enviada pelo servidor em resposta a solicitação do cliente.

Requisição

As requisições HTTP são usadas pelos clientes para solicitar recursos aos servidores. Uma requisição geralmente contém as seguintes informações:
- Linha de Requisição: Linha de texto composta pelo método, o recurso solicitado, e a versão do protocolo HTTP.
- Método: Define o que o cliente solicita ao servidor. Pode ser a visualização do conteúdo, substituição, alteração ou exclusão de recursos.
- Recurso: Página web, arquivo, serviço ou outro item solicitado ao servidor.
- Cabeçalho: Informações adicionais sobre a requisição. Ex: Navegador, tipo de conteúdo, etc.

Image description

Resposta

As respostas são usadas pelo servidor para responder às requisições dos clientes. Uma resposta, geralmente contém as seguintes informações:
- Código da resposta: Status da requisição. Indica o resultado de uma requisição, pertencendo a uma classe.
- Cabeçalho: Informações adicionais da resposta. Ex: Tipo de conteúdo, tempo de resposta, data, etc.
- Corpo da resposta: Conteúdo da requisição feita. Ex: HTML, TXT, JSON, XML, etc.

Image description

Métodos HTTP

- GET: Recupera o conteúdo de um recurso especificado. É o método mais comum para solicitar páginas web e dados. É seguro e geralmente utilizado para recuperação de informações.
- POST: Envia dados ao servidor para criar ou atualizar um recurso. Pode ter efeitos colaterais e não é projetado para ser repetido da mesma maneira. Espera que a requisição contenha a representação completa do recurso.
- PUT: Substitui a representação actual de um recurso especificado com o conteúdo da requisição.
- DELETE: Exclui o recurso especificado.
- PATCH: Aplica modificações parciais a um recurso existente. Permite actualizações incrementais.
- OPTIONS: Obtem informações sobre as opções de comunicação disponíveis para o recurso especificado. Fornece metadados sobre a requisição.
- HEAD: Verifica a existência de um recurso e obter informações sobre o cabeçalho sem recuperar o conteúdo completo.
- CONNECT: Estabelece um túnel seguro de comunicação entre o cliente e o servidor. Geralmente é usado em conjunto com o protocolo SSL/TLS para criar uma conexão segura.
- TRACE: Testa a conectividade e diagnóstico de problemas na comunicação entre o cliente e o servidor. Este método é utilizado principalmente para fins de depuração.

Idempotência dos Métodos HTTP

Um método idempotente é um método que retorna o mesmo resultado depois várias requisições idênticas. Isto é, uma requisição pode ser feita várias vezes não causa nenhum efeito colateral no servidor.
Os métodos idempotentes são projetados para garantir que a repetição da requisição não cause alterações inesperadas no estado do servidor. Isso é particularmente importante em situações em que uma requisição pode ser repetida devido a falhas de rede, timeouts ou outras condições imprevisíveis.

Os métodos comuns que possuem a propriedade de idempotência são:
- GET: Apenas solicita um recurso sem modificar o estado do servidor.
- PUT: Actualiza um recurso. Se usarmos os mesmos dados, o resultado será o mesmo.
- DELETE: A remoção de um recurso, resulta no mesmo estado, independente do número de solicitações.

Exemplos de Idempotência

- Acessar uma página web: Ao acessar uma página web várias vezes, verá o mesmo conteúdo todas as vezes. Isso ocorre porque o método GET é idempotente.
- Atualizar um perfil: Ao atualizar seu perfil várias vezes com os mesmos dados, o servidor substituirá o conteúdo do perfil com os mesmos dados todas as vezes. Isso ocorre porque o método PUT é idempotente.
- Excluir um recurso: Ao excluir um recurso várias vezes, o servidor excluirá o recurso apenas uma vez e ao realizar chamadas subsequentes, o recurso já terá sido removido sem causar efeitos colaterais. Isso ocorre porque o método DELETE é idempotente.

Códigos de Resposta HTTP

Os códigos de resposta HTTP são utilizados para comunicar o status de uma solicitação entre o cliente e o servidor web. Esses códigos são enviados no cabeçalho da resposta HTTP.
Os códigos ajudam na comunicação eficaz entre o cliente e servidor, informando sobre o estado da solicitação e permitindo a tomada de decisões apropriadas.

Os Códigos HTTP são compostos por três dígitos e são divididos em cinco categorias principais.

Cada categoria representa uma classe de respostas. As principais categorias são:

1xx (Informação): Indicam que a requisição foi recebida, entendida e está sendo processada.

  • 100 Continue: O servidor recebeu os cabeçalhos da requisição e o cliente deve prosseguir com o corpo da requisição.
  • 101 Switching Protocols: O servidor concorda em mudar os protocolos solicitados pelo cliente.

2xx (Sucesso): Indicam que a requisição foi recebida, entendida, aceita e processada com sucesso.

  • 200 OK: A solicitação foi bem-sucedida.
  • 201 Created: A solicitação foi bem-sucedida e resultou na criação de um novo recurso.
  • 204 No Content: A solicitação foi bem-sucedida, mas não há conteúdo a ser retornado.

3xx (Redirecionamento): Indicam que o cliente precisa realizar ações adicionais para completar a solicitação.

  • 301 Moved Permanently: O recurso solicitado foi movido permanentemente para outra localização.
  • 302 Found (ou 303 See Other): O recurso solicitado foi encontrado em uma nova localização temporária.
  • 304 Not Modified: Indica que o recurso não foi modificado desde a última solicitação.

4xx (Erro no Cliente): Indicam que ocorreu um erro na solicitação do cliente.

  • 400 Bad Request: A solicitação do cliente é inválida.
  • 401 Unauthorized: A solicitação requer autenticação.
  • 403 Forbidden: O servidor entende a solicitação, mas o acesso não é permitido.
  • 404 Not Found: O recurso solicitado não foi encontrado.

5xx (Erro no Servidor): Indicam que o servidor falhou ao atender uma requisição.

  • 500 Internal Server Error: Erro genérico do servidor.
  • 502 Bad Gateway: O servidor, enquanto agindo como um gateway ou proxy, recebeu uma resposta inválida do servidor upstream.
  • 503 Service Unavailable: O servidor não está pronto para lidar com a solicitação. Geralmente, isso é temporário.

Ferramentas para Visualizar Mensagens HTTP

- Curl: Ferramenta CLI que permite fazer solicitações HTTP e visualizar as respostas diretamente no terminal.
- Navegador (Developer Tools): Navegadores modernos oferecem ferramentas de desenvolvedor que permitem visualizar detalhes de requisições e respostas HTTP.
- Postman: Ferramenta colaborativa que fornece uma interface gráfica fácil de usar para criar e enviar solicitações HTTP, visualizando as respostas, e permite organizar e automatizar testes de API.

Conclusão

Concluindo, é altamente recomendado que os desenvolvedores se aprofundem no estudo dos vários aspectos do Protocolo HTTP. Dado que é o protocolo mais amplamente utilizado nas aplicações do mundo real, compreender os seus conceitos é crucial para o desenvolvimento eficaz de aplicações web.
Um sólido entendimento do HTTP não apenas facilita a criação de aplicações mais eficientes, mas também aprimora a capacidade de compreender e solucionar problemas relacionados à troca de requisições e respostas entre clientes e servidores.
O conhecimento profundo do HTTP proporciona uma base sólida para o desenvolvimento web e contribui para a construção de sistemas mais robustos e eficazes.

Referências

Top comments (0)