Chrome blockiert, wenn mehrere Anforderungen an dieselbe Ressource gestellt werden?

Ich versuche zum ersten Mal, ein langes Polling zu implementieren, und verwende dazu XMLHttpRequest-Objekte. Bisher war ich erfolgreich darin, Ereignisse in Firefox und Internet Explorer 11 abzurufen, aber Chrome ist diesmal seltsamerweise das Ungewöhnliche.

Ich kann eine Seite laden und es läuft gut. Es stellt die Anforderung sofort und beginnt mit der Verarbeitung und Anzeige von Ereignissen. Wenn ich die Seite in einem zweiten Tab öffne, werden auf einer der Seiten Verzögerungen beim Empfang von Ereignissen angezeigt. Im Dev Tools-Fenster werden mehrere Anfragen mit diesem Timing angezeigt:

"Angehalten" reicht bis zu 20 Sekunden. Dies geschieht nicht bei jeder Anfrage, sondern normalerweise bei mehreren Anfragen hintereinander und auf einer Registerkarte.

Zuerst dachte ich, dies sei ein Problem mit meinem Server, aber dann öffnete ich zwei IE-Registerkarten und zwei Firefox-Registerkarten, und alle verbinden sich und empfangen dieselben Ereignisse, ohne anzuhalten. Nur Chrome hat solche Probleme.

Ich denke, dies ist wahrscheinlich ein Problem mit der Art und Weise, wie ich die Anfrage stelle oder versorge. Als Referenz sehen die Anforderungsheader folgendermaßen aus:

Connection: keep-alive
Last-Event-Id: 530
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36
Accept: */*
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

Die Antwort sieht so aus:

HTTP/1.1 200 OK
Cache-Control: no-cache
Transfer-Encoding: chunked
Content-Type: text/event-stream
Expires: Tue, 16 Dec 2014 21:00:40 GMT
Server: Microsoft-HTTPAPI/2.0
Date: Tue, 16 Dec 2014 21:00:40 GMT
Connection: close

Trotz der beteiligten Header verwende ich nicht die native EventSource des Browsers, sondern eine Polyfill, mit der ich zusätzliche Header festlegen kann. Das Polyfill verwendet XMLHttpRequest unter der Decke, aber es scheint mir, dass es, egal wie die Anfrage gestellt wird, nicht für 20 Sekunden stehen bleiben sollte.

Was könnte dazu führen, dass Chrome so blockiert?

Bearbeitenuf der Chrome-Seite chrome: // net-internals / # events wird angezeigt, dass ein Timeout-Fehler vorliegt:

t=33627 [st=    5]      HTTP_CACHE_ADD_TO_ENTRY  [dt=20001]
                --> net_error = -409 (ERR_CACHE_LOCK_TIMEOUT)

Die Fehlermeldung bezieht sich auf einen vor sechs Monaten zu Chrome hinzugefügten Patch https: //codereview.chromium.org/34564300), das eine Zeitüberschreitung von 20 Sekunden implementiert, wenn dieselbe Ressource mehrmals angefordert wird. In der Tat, einer der Fehler, die der Patch zu beheben versucht Bug Nummer 46104) bezieht sich auf eine ähnliche Situation, und der Patch sollreduziere die Wartezeit.

Es ist möglich, dass die Antwort (oder Problemumgehung) hier nur darin besteht, dass die Anforderungen anders aussehen, obwohl Chrome möglicherweise den von mir festgelegten "no-cache" -Header berücksichtigen könnte.