Primeiramente precisamos entender que o protocolo HTTP está presente na camada de aplicação do modelo OSI, ela é a única camada que interage diretamente com os dados do usuário
Modelo OSI (Open System Interconnection) : modelo que oferece um padrão para que diferentes sistemas de computadores possam se comunicar
O que é HTTP?
- Bom, o HTTP é um protocolo ou seja, um conjunto de regras, estabelecido para organizar a maneira como os computadores trocam dados entre si
- HTTP significa Hypertext Transfer Protocol (Protocolo de transferência de hipertexto). Um conjunto de regras que permite passar com todos os detalhes dados como texto, imagem, vídeos e áudios entre dispositivos
- Suas versões rodam sobre o TCP, e a sua versão mais atual, o HTTP/3 também roda sobre UDP
- Os cabeçalhos de solicitação e resposta são dados em ASCII
HTTP e HTTPS
Já ouvimos falar que existem esses dois protocolos, mas qual a diferença entre eles?
- O HTTP e o HTTPS recuperam os dados da mesma maneira. A diferença é que o protocolo HTTP quando utiliza um protocolo de transporte seguro, chamado TLS (Transport Layer Security), constitui o que conhecemos como HTTPS
Como funciona?
A comunicação funciona em duas pontas, a partir da solicitação (requisição) no lado do usuário (cliente) para o lado o servidor web, e uma resposta se referindo à ação do servidor
Elementos da requisição
Compostos por:
- Método HTTP
- Caminho do recurso a ser buscado
- Versão do protocolo HTTP
- Cabeçalho (header)
- Corpo (body)
Elementos das respostas
Compostos por:
- Versão do protocolo HTTP
- Código de status
- Mensagem de status
- Cabeçalho (header)
- Corpo (body)
Cabeçalho / Header
Os cabeçalhos contém informações básicas como tipo de conteúdo, idioma, conjunto de caracteres, entre outros
Abaixo temos uma lista de alguns dos cabeçalhos de uma requisição HTTP
- Accept-Language : Determina qual linguagem é entendida pelo cliente e qual a sua região de preferência
- Allow : Lista quais métodos HTTP são aceitos pelo servidor para o recurso acessado
- Content-Language : É a forma do servidor dizer ao cliente quais linguagens estão disponíveis para o recurso atual
- Cookie : Contém o valor de um Cookie HTTP e é a forma do navegador enviar esse dado de volta ao servidor a cada requisição
- Content-Type : Indica qual o tipo de mídia de um recurso
- User-Agent : Contém uma string de identificação da aplicação, sistema operacional e distribuidor do software que fez a requisição
Corpo / Body
É a resposta àquela solicitação. No HTTP, pode ser desde um simples texto, a um hipertexto (HTML), um arquivo PDF, uma imagem, JSON, XML etc
Métodos HTTP
- Os métodos indicam ações que a solicitação HTTP espera de um determinado servidor consultado
- Cada método estipula uma operação diferente
Existem nove métodos HTTP, são eles
GET
Solicita o envio de um recurso específico. Requisições utilizando este método retornam apenas dadosHEAD
Solicita apenas o cabeçalho da mensagem, sem conter o corpo da mensagemPOST
Submete uma entidade a um recurso específico, geralmente causando uma mudança no estado do recurso. Faz o upload de dados para um servidorPUT
Substitui a representação atual do destino pela carga de dados da requisiçãoDELETE
Exclui um recurso específicoTRACE
Serve para depuração, ele instrui o servidor a enviar de volta a solicitação. É útil quando a solicitação não está sendo processada corretamente, e o cliente deseja saber qual solicitação o servidor recebeuCONNECT
Estabelece uma conexão com o servidor através de um dispositivo intermediário. Exemplo: cache webOPTIONS
Fornece um meio para que o cliente consulte o servidor e obtenha os métodos e cabeçalhos que podem ser usadosPATCH
Utilizado para aplicar modificações parciais em um recurso
Códigos de status de resposta HTTP
- Toda solicitação obtém uma resposta que contém uma linha de status e as informações adicionais da página
- A linha de status possui um código de três dígitos informando se a solicitação foi atendida, se não e porque não
- O primeiro dígito serve para dividir a resposta em cinco grupos importantes
Grupos
Código | Significado |
---|---|
1xx | Informação |
2xx | Sucesso |
3xx | Redirecionamento |
4xx | Erro do cliente |
5xx | Erro do servidor |
Alguns exemplos de códigos de status
Código | Descrição |
---|---|
100 Continue | Indica que o cliente deve continuar a solicitação ou ignorar a resposta se a solicitação já estiver concluída |
102 Processing | Indica que o servidor recebeu e está processando a requisição, mas nenhuma resposta está disponível ainda |
200 Ok | Indica que a solicitação foi bem sucedida |
201 Created | A requisição foi bem sucedida e um novo recurso foi criado como resultado. Normalmente utilizado após requisições POST ou PUT |
202 Accepted | A solicitação foi recebida mas ainda não foi atendida, nesse caso não será enviado nenhuma resposta posteriormente de forma assíncrona. É utilizado em casos em que outro processo ou servidor manipula a solicitação |
300 Multiple Choices | A solicitação tem mais de uma resposta possível, e o usuário deve escolher um deles |
301 Moved Permanently | A URL do recurso solicitado foi movido permanentemente, a nova URL é enviada na resposta |
302 Found | Significa que a URI do recurso foi alterada temporariamente, mas que essa mesma URI deve ser usada para requisições no futuro |
400 Bad Request | O servidor não pode processar a requisição devido a um erro do cliente |
401 Unauthorized | Significa que o cliente deve se autenticar para obter a resposta desejada |
403 Forbidden | O cliente não tem direitos de acesso ao conteúdo, diferente do 401, aqui a identidade do cliente é conhecida |
404 Not Found | Indica que o servidor não pode encontrar o recurso solicitado |
418 I'm a Teapot | O servidor se recusa a preparar café com um bule de chá |
429 Too Many Requests | O cliente enviou muitas requisições em um dado tempo |
500 Internal Server Error | O servidor encontrou uma condição inesperada que o impediu de atender a solicitação |
501 Not Implemented | O servidor não reconhece o método de solicitação e não é capaz de suportá-lo para nenhum recurso |
502 Bad Gateway | Ao atuar como gateway ou proxy, o servidor recebeu uma resposta inválida de um servidor de entrada que ele acessou ao tentar atender à solicitação |
Versões do HTTP
HTTP/1.0
- A conexão entre um navegador e um servidor, habitualmente é feita através da conexão TCP
- No HTTP/1.0 depois que a conexão era estabelecida, uma única solicitação era enviada e uma única resposta era devolvida, e a conexão TCP era encerrada
- Porém como as páginas Web continham grandes números de links, imagens e ícones, o estabelecimento de uma única conexão TCP para transportar um único ícone se tornou muito custoso, com isso surgiu o HTTP/1.1
HTTP/1.1
- Com essa versão foram admitidas conexões persistentes
- Assim é possível estabelecer uma conexão TCP, enviar uma solicitação e obter uma resposta, e depois enviar solicitações adicionais e receber respostas adicionais
- Também é chamado de reúso de conexão
HTTP/2.0
- Melhorias de desempenhos
- No HTTP/2, uma conexão TCP é estabelecida e muitas solicitações podem ser enviadas e o servidor pode responder a elas em qualquer ordem que desejar
- Através de um mecanismo chamado server push, o HTTP/2 permite que o servidor envie arquivos que ele já sabe serem necessários, mas que o cliente pode não saber inicialmente
- As respostas podem retornar em qualquer ordem
- O HTTP/2 compacta os cabeçalhos e os envia em binário para reduzir o uso da largura de banda e a latência
HTTP/3.0
- Sua principal diferença é o protocolo de transporte usado para dar suporte às mensagens HTTP: em vez de depender do TCP, ele depende de uma versão aumentada do UDP chamada QUIC, que conta com o controle de congestionamento do espaço do usuário executado em cima do UDP
Referências
Códigos de Status HTTP
TANENBAUM, A.S. Redes de Computadores. 1988.
Diving into the HTTP
Top comments (0)