2012-11-26 10 views
17

Sto tentando di inviare dati in modalità Chunked. Tutte le intestazioni sono impostate correttamente e i dati sono codificati di conseguenza. I browser riconoscono la mia risposta come frammentata, accettando le intestazioni e iniziando a ricevere i dati.Codifica trasferimento Chunked - comportamento del browser

Mi aspettavo che il browser aggiornasse la pagina su ogni blocco ricevuto, invece attende fino a quando tutti i blocchi vengono ricevuti, quindi li visualizza tutti. È questo il comportamento previsto?

Mi aspettavo di vedere ogni blocco visualizzato subito dopo essere stato ricevuto. Quando si utilizza curl, ciascun blocco viene visualizzato subito dopo la sua ricezione. Perché lo stesso non accade con i browser della GUI? Stanno usando una sorta di buffering/cache?

Ho impostato l'intestazione Cache-Control su no-cache, quindi non sono sicuro che riguardi la cache.

+0

Quali browser stai cercando? Generalmente i browser eseguono il rendering incrementale, ma possono bufferizzare internamente le cose per un po 'perché i relayout sono costosi ... –

+0

Che tipo di dati stai inviando nei blocchi? È solo HTML o stai inviando dati di script? – qqx

+0

sto inviando 'text/html'. Ho provato su Firefox e Chrome. Entrambi aspettano tutti i blocchi per essere ricevuti. –

risposta

13

i browser afaik richiedono un po 'di carico utile per avviare i blocchi di rendering man mano che vengono ricevuti.
Curl è ovviamente un'eccezione.

Provare a inviare circa 1 KB di dati arbitrari prima del primo blocco.

Se si sta eseguendo tutto correttamente, i browser devono eseguire il rendering dei blocchi non appena ricevuti.

+0

Yay !!! era così! funziona perfettamente in Firefox, Chrome, Safari, persino Opera! Grazie mille. –

+0

Grazie amico, mi hai salvato la giornata! – Jekis

+0

1KiB è davvero un buon valore generale, per maggiori dettagli guarda qui: http://stackoverflow.com/q/16909227/1534459 – bodo

0

Il browser è in grado di elaborare e visualizzare i dati nel momento in cui i dati vengono inviati in blocco o meno. Se un browser esegue il rendering dei dati di risposta, sarà una funzione della struttura dei dati e il tipo di buffering utilizzato. per esempio. Prima che il browser possa eseguire il rendering di un'immagine, deve avere il documento (o abbastanza del documento), il foglio di stile, ecc.

Il chunking è utile soprattutto quando la lunghezza di una risorsa è sconosciuta al momento della risposta della risorsa viene generato (non è possibile includere "Content-Length" nelle intestazioni di risposta) e il server non desidera chiudere la connessione dopo che la risorsa è stata trasferita.

Problemi correlati