An Interest In:
Web News this Week
- April 24, 2024
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
- April 19, 2024
- April 18, 2024
Como funciona o encoding no protocolo HTTP?
... ou: o que acontece com os bytes das requisies HTTP quando voc se comunica com alguns servidores?
Antes, um pouco de contexto...
Quando temos um arquivo grande e precisamos mand-lo para algum, o que vem na nossa cabea de imediato zipar este arquivo.
Quando zipamos, isto , comprimimos um arquivo, o que estamos fazendo na realidade (de forma simplificada, claro) aplicar um algoritmo de compresso nos seus bytes. O que esses algoritmos fazem diminuir a redundncia da sequncia de bytes que compe o arquivo, utilizando de referncias como ponteiros onde ocorrem sequncias que j se repetem.
Mas qual a relao entre esses algoritmos e o protocolo HTTP?
Imagine que voc deseja fazer um GET request para um site, por exemplo para http://example.org.
No seu browser, voc vai ver a seguinte pgina, interpretada pelo seu browser:
Contudo, o que voc de fato recebe do servidor uma enorme stream contendo o cdigo-fonte da pgina, aps as headers:
Logo transferir o contedo de pginas contendo uma quantidade extensa de dados torna-se pouco efetivo, tanto para o cliente quanto para o servidor. A partir disso, podemos ento "zipar" a resposta que recebemos. Ao fazer isso, diminumos o tamanho da resposta, que vem comprimida, e assim aumentamos a eficincia da comunicao.
Como isso ocorre?
Normalmente, a resposta comprimida utilizando-se do algoritmo gzip, mas isso vai depender do servidor.
Antes da aplicao efetiva do algoritmo de compresso, ocorre a chamada "negociao" entre o browser e o servidor: o browser envia a header accept-encoding
com o algoritmo suportado (exemplo: Accept-Encoding: gzip
) e o server responde com a header content-encoding
com o algoritmo escolhido.
Obs: nesse caso, usamos a header Vary
para armazenar em cache os diferentes valores para o encoding.
Dessa forma, as headers Accept-Encoding
e Content-Encoding
vo definir o algoritmo de compresso escolhido para diminuir o tamanho dos arquivos sendo transferidos na comunicao. Isso de extrema importncia para tornar o uso da conexo mais eficiente.
Mas possvel otimizar ainda mais a comunicao atravs do uso de outra header: Transfer-Encoding
Quando recebemos a resposta do servidor, recebemos o que chamado de "payload". Isso a resposta que pode ser, como j vimos acima, uma pgina HTML por exemplo.
Definition of payload : The "actual data" in a packet or file minus all headers attached for transport and minus all descriptive meta-data. In a network packet, headers are appended to the payload for transport and then discarded at their destination.
Contudo, possvel "dividir" esse payload, e isso ocorre quando utilizamos da header transfer-encoding
. Quando essa header no utilizada, o payload body e message body so iguais.
Exemplo da resposta vista antes, porm com transfer-encoding:
Ou seja, as respostas com transfer-encoding seguem a seguinte estrutura:
Isso divide as informaes recebidas em chunks, ou seja, "pedaos" de dados. Isso, alm de ajudar a diminuir a carga da comunicao, ajuda o servidor a manter uma conexo mesmo para contedos gerados dinamicamente.
Em muitos servidores, comum ocorrer a combinao de Content-Encoding: gzip + Transfer-Encoding: chunked, por tornarem a comunicao mais eficiente.
Original Link: https://dev.to/wrongbyte/como-funciona-o-encoding-no-protocolo-http-94f
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To