Protocolo HTTP
O que é HTTP, pra que serve e como funciona
Last updated
O que é HTTP, pra que serve e como funciona
Last updated
Vimos anteriormente como funciona a e como ela pode ser utilizada em uma arquitetura de rede cliente-servidor.
O quê poderia acontecer caso a mensagem do cliente estivesse colocada de outra forma?
Neste caso, diferentes clients poderiam enviar mensagens de diferentes formatos, cada qual com seu próprio formato, obrigado servers a saberem interpretar todos os formatos adequadamente.
Como podemos então criar uma forma padronizada de mensagens, onde clients e servers pudessem todos utilizar o mesmo padrão? Quando queremos padronizar algo, geralmente criamos um protocolo.
Não esquecendo que a comunicação TCP/IP é baseada em client enviando um request e server enviando um response, logo o protocolo HTTP também está sujeito a tal característica.
Um simples request com formato HTTP pode ser definido da seguinte forma:
Onde
GET
é o verbo da mensagem, neste caso remete semanticamente a "buscar algum recurso"
/hello
é o predicado da mensagem, remete a "caminho do recurso"
HTTP/2
é a versão do protocolo
Já o response com formato HTTP pode ser algo do tipo:
Onde
HTTP/2
representa a versão do protocolo
200
é o código status da resposta, que indica que o request foi recebido e interpretado com sucesso, retornando o que foi pedido
Hello
é o corpo da mensagem
E se quisermos enviar mais informações na mensagem HTTP, como por exemplo:
o tipo de conteúdo que queremos enviar/receber
quanto tempo o recurso deve "durar"
o tamanho máximo permitido
...pra não mencionar diversas outras informações relevantes e que não são possíveis de enviar no corpo da mensagem? Para isto existem os HTTP headers. Portanto, podemos definir o template de uma mensagem HTTP como sendo da seguinte forma:
O que são esses \r\n
na mensagem? Este caracter é muito importante no protocolo HTTP, e pode ser explicado da seguinte forma:
\r
significa carriage return, move o cursor para o início da linha sem avançar para a próxima linha
\n
significa line feed, move o cursos para a próxima linha sem recuar para o início da linha
\r\n
é a combinação dos dois primeiros, ou seja, move o cursor para o início da próxima linha. É uma forma da mensagem ser consumida *continuamente* no socket TCP/IP até não ter mais conteúdo no socket.
Vamos então implementar uma simples comunicação HTTP sem headers em Ruby.
client.rb
E vamos ao server:
server.rb
Ao rodarmos ruby server.rb
e ruby client.rb
, conseguimos ver a mensagem "Hello" aparecendo no screen do client.
Yay, nossa primeira implementação de HTTP em Ruby!
Um protocolo é uma especificação bem definida e documentada de diretrizes e regras que, se seguidas, garantem que todas as partes possam estar uniformes. Para resolver o problema de padronizar mensagens na internet através de TCP/IP, foi criado um conjunto de especificações para envio com conteúdo que suportasse diferentes formatos (text, PDF, video etc), que se tornou o protocolo HyperText Transfer Protocol, ou .