Por que esse script funciona como esperado em 'curl', mas não no navegador?

1

Eu tenho um script que, quando acessado com o protocolo HTTP, envia alguns dados, pausa por alguns segundos e envia mais alguns dados, repetindo até que todos os dados sejam enviados.

Quando eu o acesso em curl , ele se comporta como esperado e envia os dados peça por peça. No entanto, se eu tentar acessar a página em um navegador, nada será exibido na tela até que o script inteiro termine de ser executado, alguns segundos depois.

Você pode observar esse comportamento (temporariamente) acessando a URL

curl 'http://50.80.82.137:8000'

Em seguida, tente a URL novamente em um navegador e observe como o script aguarda cerca de 7 segundos antes de carregar qualquer coisa, mesmo que deva ter acesso às primeiras linhas imediatamente.

Qual é a fonte desse comportamento?

Está escrito em NodeJS e Eu o coloco no GitHub como referência. No entanto, neste caso, estou supondo que a linguagem envolvida é irrelevante (e é por isso que perguntei em SuperUser em vez de StackOverflow , e qualquer script que tenha uma "pausa" antes de enviar os dados se comportarão de maneira semelhante.

    
por IQAndreas 04.01.2015 / 16:01

1 resposta

2

Um navegador da Web não pode iniciar o processamento de uma página da Web até que o documento HTML inteiro tenha concluído o download. Uma vez baixado o HTML, ele pode ser analisado e renderizado, mas não antes.

Curl não precisa esperar pelo documento inteiro, já que ele não analisa nada, apenas imprime tudo em StdOut assim que ele chega.

Use ferramentas do lado do cliente (Javascript, CSS, etc.) para afetar o comportamento do cliente, não o protocolo de rede.

    
por 15.01.2015 / 19:23