2012-11-26 18 views
17

Próbuję wysłać dane w trybie porcji. Wszystkie nagłówki są ustawione prawidłowo, a dane są odpowiednio zakodowane. Przeglądarki rozpoznają moją odpowiedź jako fragment, akceptując nagłówki i rozpoczynając odbiór danych.Kodowanie przeniesienia fragmentacji - zachowanie przeglądarki

Oczekiwano, że przeglądarka zaktualizuje stronę w każdym odebranym kawałku, zamiast tego oczekuje aż wszystkie porcje zostaną odebrane, a następnie wyświetli je wszystkie. Czy to oczekiwane zachowanie?

Spodziewałem się wyświetlenia każdej części zaraz po jej otrzymaniu. Podczas korzystania z curl każda porcja jest wyświetlana zaraz po jej otrzymaniu. Dlaczego nie dzieje się tak samo z przeglądarkami GUI? Czy używają jakiegoś bufora/bufora?

Ustawiam nagłówek Cache-Control na no-cache, więc nie jestem pewien, czy chodzi o pamięć podręczną.

+0

Które przeglądarki przeglądasz? Generalnie przeglądarki _will_ robią renderowanie przyrostowe, ale mogą wewnętrznie buforować rzeczy na trochę, ponieważ przekazy są drogie ... –

+0

Jaki typ danych wysyłacie w porcjach? Czy to tylko HTML czy przesyłasz dane skryptu? – qqx

+0

Wysyłam 'text/html'. Próbowałem w Firefoksie i Chrome. Oba czekają na otrzymanie wszystkich porcji. –

Odpowiedz

13

Przeglądarki afaik wymagają trochę ładowności, aby rozpocząć tworzenie fragmentów renderowania po ich otrzymaniu.
Curl jest oczywiście wyjątkiem.

Spróbuj wysłać około 1KB dowolnych danych przed pierwszym porcją.

Jeśli wszystko robisz poprawnie, przeglądarki powinny renderować porcje tak, jak je otrzymały.

+0

Yay !!! to było to! działa doskonale w przeglądarkach Firefox, Chrome, Safari, a nawet Opera! Dziękuję bardzo. –

+0

Dziękuję człowieku, uratowałeś mój dzień! – Jekis

+0

1KiB jest rzeczywiście dobrą ogólną wartością, więcej szczegółów można znaleźć tutaj: http://stackoverflow.com/q/16909227/1534459 – bodo

0

Przeglądarka może przetwarzać i renderować dane w zależności od tego, czy dane są przesyłane masowo, czy nie. To, czy przeglądarka będzie renderować dane odpowiedzi, będzie funkcją struktury danych i jakiego rodzaju buforowania zatwierdzi. na przykład Zanim przeglądarka może renderować obraz, musi mieć dokument (lub wystarczającą ilość dokumentu), arkusz stylów itp.

Chunking jest przydatny, gdy długość zasobu jest nieznana w momencie odpowiedzi zasobu jest generowany ("Długość treści" nie może być zawarta w nagłówkach odpowiedzi), a serwer nie chce zamknąć połączenia po przesłaniu zasobu.