Ik heb een probleem waar ik niet echt uitkom, ik ben zeker niet onervaren met de materie maar ik heb het idee dat ik in dit geval iets over het hoofd zie. Ik kan er ook niks over vinden op interwebs. Het gaat om het volgende:
Mijn doelstelling is om een soort van streaming connectie te openen naar een website. XMLHTTPRequest wil dit niet (ondersteunt geen readystate=3 responsetext uitlezen, althans zeker niet in alle browsers) dus dan maar met een chunked pagina in een hidden frame. Voor een proof of concept heb ik de simpelst mogelijke vorm geschreven waarin ik wat controle heb:
Deze woont voorlopig in een iframe op een lege pagina. Volgens mij is dit correct: headers zijn vziw correct, format is OK. Die output buffer is bedoeld om php tussentijds te laten zenden naar Apache, dat doet PHP ook wel maar Apache buffert daarna gezellig weer waardoor de fysieke chunkedness in de soep loopt (het komt allemaal alsnog in één packet binnen). Dat is allemaal niet van belang, dat komt later wel, nu is het probleem:
[de output van] deze code doet het wel in Firefox, maar niet in Chrome
Sterker nog, als ik wat klooi in m'n code (en strikt genomen zelfs wat fouten introduceer, zoals verkeerde chunk sizes) doet het het alsnog vrij goed. Firefox lijkt vrij gemakkelijk om te springen met het geheel en zeurt niet. Chrome geeft altijd een:
En internet explorer wil er ook weinig van laten zien, maar dat boeit me wat minder. Wat doe ik fout? Ik heb Wireshark er ook al lekker op los gelaten en deze zegt dit:
de server is een laptop die aan de muur hangt met kapotte RTC batterij die denkt dat het 1988 is
Mijn doelstelling is om een soort van streaming connectie te openen naar een website. XMLHTTPRequest wil dit niet (ondersteunt geen readystate=3 responsetext uitlezen, althans zeker niet in alle browsers) dus dan maar met een chunked pagina in een hidden frame. Voor een proof of concept heb ik de simpelst mogelijke vorm geschreven waarin ik wat controle heb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| <?php header("Cache-Control: no-cache, must-revalidate"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Transfer-Encoding: chunked"); $a = 0; ob_start(); echo "\r\n"; while($a < 10) { $a++; echo "15\r\n"; echo microtime()."\r\n"; ob_flush(); flush(); //sleep(1); } echo "0\r\n\r\n"; ob_end_flush(); ?> |
Deze woont voorlopig in een iframe op een lege pagina. Volgens mij is dit correct: headers zijn vziw correct, format is OK. Die output buffer is bedoeld om php tussentijds te laten zenden naar Apache, dat doet PHP ook wel maar Apache buffert daarna gezellig weer waardoor de fysieke chunkedness in de soep loopt (het komt allemaal alsnog in één packet binnen). Dat is allemaal niet van belang, dat komt later wel, nu is het probleem:
[de output van] deze code doet het wel in Firefox, maar niet in Chrome
Sterker nog, als ik wat klooi in m'n code (en strikt genomen zelfs wat fouten introduceer, zoals verkeerde chunk sizes) doet het het alsnog vrij goed. Firefox lijkt vrij gemakkelijk om te springen met het geheel en zeurt niet. Chrome geeft altijd een:
code:
1
| Error 320 (net::ERR_INVALID_RESPONSE): Unknown error. |
En internet explorer wil er ook weinig van laten zien, maar dat boeit me wat minder. Wat doe ik fout? Ik heb Wireshark er ook al lekker op los gelaten en deze zegt dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| HTTP/1.1 200 OK Date: Fri, 02 Sep 1988 11:32:57 GMT Server: Apache/2.2.9 (Win32) PHP/5.2.8 X-Powered-By: PHP/5.2.8 Cache-Control: no-cache, must-revalidate Expires: Mon, 26 Jul 1997 05:00:00 GMT Transfer-Encoding: chunked Keep-Alive: timeout=5, max=99 Connection: Keep-Alive Content-Type: text/html 15 0.95024700 589203177 15 0.95047100 589203177 15 0.95055700 589203177 15 0.95057900 589203177 15 0.95060200 589203177 15 0.95062300 589203177 15 0.95064500 589203177 15 0.95066700 589203177 15 0.95068900 589203177 15 0.95071100 589203177 0 |
de server is een laptop die aan de muur hangt met kapotte RTC batterij die denkt dat het 1988 is