Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 20, 2022 08:25 pm GMT

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:
Site normal

Contudo, o que voc de fato recebe do servidor uma enorme stream contendo o cdigo-fonte da pgina, aps as headers:
Cdigo fonte do site

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.
Negociao HTTTP
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.
payload

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:
chunked response

Ou seja, as respostas com transfer-encoding seguem a seguinte estrutura:
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

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To