Você já parou para pensar quantas vezes num dia você entra em algum site? Isso é tão comum em nossas vidas que não seria exagero dizer que, para algumas pessoas, usar a internet é tão essencial quanto o ar que respiramos. E nesse intervalo de tempo entre digitar a URL (Uniform Resource Locator), o endereço eletrônico do site, e a página efetivamente aparecer na sua tela, algumas coisas aconteceram durante esse processo – e uma delas é o uso do protocolo HTTP.
Se você quer entender melhor o que é HTTP e como ele é crucial para a internet, nós explicamos neste post.
E se você já tem um site, você precisa ficar ainda mais atento, porque um descuido com o protocolo em si pode expor superfícies de ataque e, inclusive, afetar diretamente as suas vendas.
O que é HTTP?
HTTP é a sigla para Hypertext Transfer Protocol, ou Protocolo de Transferência de Hipertexto em português – se você não se recorda ou ainda não reparou, ela aparece no início do endereço de um site. O HTTP é um protocolo de transferência de camada de aplicação baseado em texto e é considerado a base da comunicação de dados entre dispositivos em rede. E durante esse processo de requisição-resposta, o HTTP utiliza padrões e regras pré-definidas para a troca de informações. Em linhas gerais, HTTP é o protocolo que clientes e servidores (e servidores entre si) utilizam para se comunicar e, inclusive, é o protocolo mais utilizado para aplicações e APIs da web.
Além disso, para que a troca de dados seja realizada, o HTTP depende dos outros dois protocolos de rede: o TCP (Transmission Control Protocol) e o IP (Internet Protocol). A partir disso, tem-se o modelo TCP/IP, que também faz parte do processo de comunicação entre clientes e servidores.
Natureza stateless
Uma informação importante sobre o protocolo HTTP é que ele é stateless – ou “sem estado” em português. Mas o que isso significa? Isso significa que cada requisição que o cliente faz é uma transação independente, que não está relacionada a nenhuma requisição anterior, o que faz com que cada uma delas seja diferente para o servidor. Ou seja, mesmo que várias requisições sejam feitas ao mesmo tempo, uma não “sabe” que a outra existe, e o servidor não guarda nenhuma informação a respeito do estado do cliente, e assim que uma conexão TCP é feita, toda informação trocada é perdida. As vantagens disso é que há uma redução no uso de memória no servidor e nos problemas decorrentes de uma sessão expirada.
É importante mencionar que o HTTP é stateless se pensado em um alto nível de abstração, já que é baseado em TCP (não UDP) e, portanto, baseado em conexão e stateful do ponto de vista da camada inferior. O que isso significa é que, por ser baseado em conexão, é stateless na entrega, garantindo que todos os pacotes sejam recebidos e sequenciados corretamente.
URL
Nós já vimos o que significa URL e que ela é o primeiro passo no processo de troca de informações. Mas, apesar de ela aparecer praticamente todos os dias, ou até mesmo toda hora, na nossa vida online, muitos de nós não sabemos o que há por trás da sua estrutura. Então, considere a seguinte URL:
Na sua forma básica, podemos dividir a URL em três partes:
- O protocolo (http:// ou https://) - informa ao seu navegador como se comunicar com o servidor de um site, a fim de enviar e recuperar informações; quando é HTTPS, significa que é o HTTP seguro, que possui alguns padrões de segurança e texto criptografado.
- O domínio (azion.com) - tem o subdomínio (blog.), o nome pelo qual o site é conhecido (azion) e a TLD (.com), ou Top Level Domain, que é a categoria dos sites, tais como .com (comercial), .org (organizações) e .net (redes).
- O caminho (/edge) - direciona o navegador para uma página específica do site.
História do HTTP
Vamos começar pelo termo hipertexto, que foi criado por Ted Nelson em 1965 e definido como “escrita não sequencial”, ou seja, é um tipo de texto que se ramifica, não é necessariamente linear e contém links para outros textos. Esse termo, por sua vez, foi inspirado nas ideias anteriormente apresentadas por Vannevar Bush em seu artigo As We May Think, de 1945.
Posteriormente, em 1989, Tim Berners-Lee propôs o projeto WorldWideWeb e, em 1991, ele e sua equipe criaram um protocolo que permitiria a recuperação de textos de outros documentos via links de hipertextos, o que viria a ser o formato original do HTTP. Os hipertextos foram os primeiros arquivos que utilizavam a linguagem HTML (HyperText Mark-up Language), um formato textual para representar os documentos em hipertexto.
Assim como tudo no mundo da internet, o protocolo HTTP passou por diversas transformações e evoluiu muito, como pode ser visto abaixo:
- HTTP/0.9 - a primeira versão surgiu em 1991 e era bem simples, focada somente na transferência de texto e possuía somente um método de requisição, o GET; não possuía cabeçalhos HTTP nem status ou códigos de erro;
- HTTP/1.0 - a versão posterior surgiu em 1996 e apresentou, além da simples transferência de texto, a transmissão de dados mais sofisticados, como metadados da requisição/resposta e negociação de conteúdo;
- HTTP/1.1 - essa versão surgiu em 1999 e é considerada um marco na evolução da internet, pois eliminou diversos problemas das versões anteriores e introduziu uma série de otimizações, como mecanismo adicional de cache, transferências de codificação fragmentadas, pipelining de requisição e codificações de transferência; apesar de haver uma versão mais recente, essa ainda é a padrão, a mais utilizada no mundo;
- HTTP/2 - essa versão surgiu em 2015 e se mostrou mais preparada para o gigantesco cenário virtual atual; apesar de não ter havido mudança na semântica em relação à versão anterior, alguns benefícios notáveis são: o melhor desempenho no transporte das informações e na segurança dos dados, e a latência, que é significativamente menor.
- HTTP/3 - lançado em 2019, o protocolo HTTP/3 é mais rápido, confiável e seguro ainda. Ele apresenta uma diferença fundamental em relação à versão anterior: um novo protocolo de transporte, o QUIC. O QUIC se baseia no UDP (User Datagram Protocol), que é mais rápido do que o TCP na transmissão de dados, já que não passa pelo processo de verificação dos dados; isso, porém, faz ele ser menos seguro. Embora não seja um transporte confiável, o QUIC adiciona uma camada extra ao UDP, trazendo funcionalidades como retransmissão de pacotes e controle de congestionamento. Outra característica importante do HTTP/3 é que ele suporta HTML5, a versão mais moderna do HTML, que adiciona a capacidade de fazer programação nativa.
Entendendo onde o HTTP se encaixa no quebra-cabeça da comunicação
O HTTP é uma pequena parte do processo de comunicação, mas como esse protocolo se encaixa nela? Para entender melhor isso, vamos primeiro ver o que é o modelo OSI.
O modelo OSI (do inglês Open System Interconnection), criado pela International Organization for Standardization em 1971, é um modelo de redes de computadores que serve como um padrão, ou regras, para protocolos de comunicação entre diversos sistemas de uma rede. Ou seja, é como se fosse uma linguagem universal para redes de computadores. Nesse modelo, o sistema de comunicação é divido em sete camadas abstratas, cada uma com uma funcionalidade específica.
O protocolo HTTP atua justamente na camada 7, a camada de aplicação, onde acontece a interação entre os usuários e o computador – quando acessam um site ou checam os e-mails, por exemplo. A camada de aplicação é responsável pelos protocolos e pela manipulação de dados dos quais os softwares dependem para apresentar dados significativos ao usuário. Além do HTTP, outros protocolos que operam na camada de aplicação são: HTTPS, DNS, FTP, IMAP, MIME, POP, RTP, SMTP, TELNET, TFTP e TLS.
A comunicação usando o HTTP
Quando um cliente quer se comunicar com um servidor, a primeira coisa que acontece, após o usuário digitar a URL na barra de endereço do navegador ou trocar de página, é uma conexão TCP/IP ser aberta, e a requisição HTTP é enviada para o servidor. Nessa requisição, há uma mensagem com uma série de dados que descrevem o que o cliente requisitou. A seguir, o servidor envia para o cliente a resposta, que também contém dados que podem ser lidos. Por fim, o processo requisição-resposta é finalizado – lembrando que isso tudo geralmente leva microssegundos para acontecer.
No processo de comunicação que descrevemos acima, você deve ter percebido que há dois agentes essenciais: a requisição e a resposta.
Mensagens do HTTP
O que é uma requisição?
A requisição (request) é o pedido que o cliente envia ao servidor. Nessa mensagem, há dados específicos, que descrevem o que foi solicitado. Os principais componentes de uma requisição são:
- O método - indica a ação que o cliente deseja realizar, tais como:
- GET - para obter recursos ou recuperar dados do servidor; é o mais comum;
- POST - para enviar dados ao servidor, como a submissão de um formulário.
- HEAD - para apenas retomar a linha e os cabeçalhos de resposta.
- PUT - para enviar arquivos para o servidor ou fazer uma atualização total de um recurso;
- PATCH - para fazer a atualização parcial de um recurso;
- DELETE - para excluir documentos dentro do servidor;
- OPTIONS - para fazer uma consulta de quais comandos estão disponíveis para um determinado usuário;
- TRACE - para depurar as requisições, devolvendo o cabeçalho de um documento.
- O caminho - a URI (Uniform Resource Identifier) do recurso a ser buscado.
- A versão HTTP do protocolo.
- Os headers (cabeçalhos) - contêm informações adicionais para os servidores.
- O request body (corpo de dados) - é opcional e necessário para alguns métodos, como o POST, e contém o recurso requisitado.
O que é uma resposta?
A resposta (response) dada pelo servidor contém as informações solicitadas pelo cliente ou informa que houve algum erro em relação ao que foi pedido. Ela contém:
- O response header - contém a versão do protocolo, o código de status da requisição e o tipo de conteúdo que está incluído no corpo.
- O código do status - indica se a requisição foi bem sucedida ou não. A resposta é dada por códigos específicos e alguns deles são:
- 200 - a requisição foi respondida com sucesso;
- 301 - a requisição mudou permanentemente;
- 401 - a requisição não foi autorizada pelo servidor;
- 404 - a requisição não foi encontrada pelo servidor;
- 500 - erro interno no servidor.
- O response body - assim como na requisição, é opcional e contém dados sobre o recurso requisitado.
Outro aspecto interessante na comunicação HTTP é o uso de cache, que mantém cópias de dados que são frequentemente acessados. Basicamente, o cache acelera a busca e a entrega de dados que são muito utilizados e poupa a utilização de recursos de um servidor, melhorando o desempenho e a velocidade do processo – mas esse é um assunto para outro blog post.
A desvantagem do HTTP
Você já viu que o protocolo HTTP é a base para qualquer troca de informações na internet, mas, como tudo nessa vida, há um porém: ele não é seguro. Você sabia que é exatamente por isso que o protocolo HTTP é alvo de ações maliciosas? Dentre as ameaças, podemos citar a interceptação de dados por um invasor durante a transmissão de informações e os ataques DDoS à camada 7, também conhecido como HTTP flood attack, que sobrecarrega um servidor com solicitações HTTP e, quando não consegue mais responder ao tráfego normal, as solicitações de usuários bem intencionados são negadas.
Apesar de estarmos sujeitos a inúmeros cibercrimes, a boa notícia é que existem algumas formas de se proteger contra essas ameaças, e a Azion oferece uma série de soluções para a nossa segurança: o Web Application Firewall, o DDoS Protection e o Network Layer Protection.
As soluções de segurança da Azion
O Web Application Firewall da Azion (WAF) atua na camada 7, a camada da aplicação onde as aplicações acessam os serviços de rede, como uma barreira que usa um conjunto de regras para filtrar e monitorar o tráfego entre a sua aplicação e a internet. Ou seja, o WAF atua especificamente na segurança dos protocolos HTTP/S, já que analisa as requisições, detectando e bloqueando atividades maliciosas antes que elas alcancem a sua infraestrutura, sem impactar na performance de suas aplicações.
Já o nosso DDoS Protection fornece múltiplos níveis de proteção contra ataques DDoS, inclusive na camada 7 onde o protocolo HTTP atua, e utiliza a rede distribuída globalmente, além de diversos mitigation centers, para fornecer a inteligência e a capacidade necessárias para mitigar até os maiores e mais complexos ataques.
E o nosso Network Layer Protection, atua de forma mais ampla na proteção, já que é um perímetro de segurança programável onde você obtém proteção no edge para a camada de rede de seu tráfego de entrada e saída. Com ele, é possível bloquear, monitorar comportamentos suspeitos ou aplicar penalizações, como limitar o número de acessos, por exemplo.
Assim, a escolha das soluções de mitigação da Azion podem ajudar a sua empresa a se proteger contra tendências recentes, como ataques maiores e mais frequentes, ataques a APIs e estratégias de ataque complexas e progressivas.
A importância do HTTP
O HTTP é um protocolo simples, mas, mais do que isso, uma característica marcante é que também é acessível, pois foi projetado para que as mensagens possam ser lidas e entendidas por qualquer usuário. Além disso, a sua natureza stateless simplifica a atuação do servidor e a deixa mais rápida, já que não é preciso armazenar ou limpar dados para as próximas requisições. Se uma transação é interrompida, nenhuma parte do sistema precisa ser responsável pela limpeza do estado atual do servidor. Outro aspecto fundamental é o fato de ser extensível, o que permite a inserção de novas funcionalidades e, consequentemente, que acompanhe as necessidades e a evolução da internet na sua missão de transmitir os dados que praticamente movem o mundo.