Requisições de Faixa HTTP

7 min

language: ja bn en es hi pt ru zh-cn zh-tw

Olá, aqui é o inútil.
Sempre pensei que as requisições HTTP Get sempre recuperam a página inteira, o que eu sentia que não era nada ecológico.
No final das contas, se você quiser obter apenas as informações necessárias, por exemplo,
se você quiser obter apenas o conteúdo dentro de <head>, você deveria obter apenas uma parte, e se não, obter o todo e fazer a extração.
Se pudesse ser feito assim, os custos de transferência de rede também e o processo de análise de tags como as dentro de head seria mais amigável para a CPU e mais curto, parecendo ser só coisas boas.
Além disso, pensei que não haveria nada que o HTTP não pudesse fazer, especialmente com a comunicação TCP, então pesquisei e parece que é possível, afinal.
Requisições de Faixa HTTP

Teste com curl

Parece que é possível restringir adicionando uma faixa às informações do cabeçalho com a opção -H desta forma.

$ curl -H "Range: bytes=0-1024" https://soulminingrig.com/
<!DOCTYPE html>
<html lang="ja"><head><meta charset="utf-8"><meta content="width=device-width,initial-scale=1.0" name="viewport"><title>Home - SOULMINIGRIG</title><meta content="light dark" name="supported-color-schemes"><meta content="hsl(220, 20%, 100%)" media="(prefers-color-scheme: light)" name="theme-color"><meta content="hsl(220, 20%, 10%)" media="(prefers-color-scheme: dark)" name="theme-color"><link href="/pagefind/pagefind-ui.css" rel="stylesheet"><link href="/styles.css" rel="stylesheet"><link href="/feed.xml" rel="alternate" title="SOULMINIGRIG" type="application/atom+xml"><link href="/feed.json" rel="alternate" title="SOULMINIGRIG" type="application/json"><link href="/favicon.png" rel="icon" sizes="32x32" type="image/png"><link href="https://soulminingrig.com/" rel="canonical"><script src="/js/main.js" type="module"></script><style>.page-title{background:var(--color-highlight);padding:.5em;font-size:1.2em}</style><script data-website-id="6031aa47-e715-4f87-a99a-9e3046e5dcdc" defer="" src="https://n

Como é uma especificação de faixa, parece que está tudo bem mesmo que não seja do início.

$ curl -H "Range: bytes=1025-1025" https://soulminingrig.com/
o

Até mesmo 1 byte retorna corretamente agora.

Na prática

Como as restrições de faixa podem ser aplicadas durante a recuperação apenas adicionando-as às informações do cabeçalho, é basicamente possível em qualquer linguagem e, acima de tudo, permite um uso ecológico da largura de banda da rede, algo que as pessoas podem não estar muito cientes.
Se você quiser extrair apenas o conteúdo dentro do <head> do HTML, você pode especificar Range: bytes=0-4096, e se isso não funcionar, ou obtém tudo, ou, para ser ainda mais ecológico, envia uma requisição Get com a próxima faixa em incrementos de 4096 bytes.
Como resultado, a biblioteca de processamento subsequente também terá um tempo de extração de tags HTML mais curto, e será mais amigável para o servidor de destino.

No entanto, como mencionado no site da MDN,
assumir que "verificação se o servidor suporta requisições parciais" é agora suportado em quase todos os lugares não é bom, então, se você quiser fazer isso estritamente, você também deve usar uma condição para determinar a partir das informações de cabeçalho retornadas.

No entanto, um novo imperador da internet...

Se você estiver usando CloudFlare, que ostenta o símbolo de ticker NET como se dissesse que é o novo rei da internet, parece que as requisições são limitadas por unidade, então, mesmo que o processamento se torne mais rápido, se um bloqueio de contramedida DDoS for implementado no meio, o significado não parece muito forte no final.
No entanto, se você estiver executando um bot em um VPS, por exemplo, e ele consumir muita largura de banda com requisições externas (embora provavelmente ninguém o use tanto assim...), então requisições parciais como esta podem ser eficazes.

No entanto, como a requisição HTTP deve ser armazenada no espaço da memória uma vez que é feita, não é impossível que o uso da memória diminua um pouco. Portanto, se alguém estiver criando uma ferramenta para recuperar informações de um site, incorporar esse comportamento tornaria a operação um pouco mais gentil para o alvo, então parece necessário fazê-lo conforme a necessidade.

Era sobre HTTP, algo que eu pensava que sabia, mas na verdade não sabia.

Related Posts