Chrome si blocca quando si effettuano più richieste alla stessa risorsa?

Sto provando a implementare il polling lungo per la prima volta e sto usando gli oggetti XMLHttpRequest per farlo. Finora, sono riuscito a ottenere eventi in Firefox e Internet Explorer 11, ma Chrome è stranamente fuori moda questa volta.

Posso caricare una pagina e funziona bene. Fa subito la richiesta e inizia l’elaborazione e la visualizzazione degli eventi. Se apro la pagina in una seconda scheda, una delle pagine inizia a vedere i ritardi nella ricezione degli eventi. Nella finestra degli strumenti di sviluppo, vedo più richieste con questo tipo di tempistica:

immagine dello schermo

“Stalled” durerà fino a 20 secondi. Non accadrà a ogni richiesta, ma di solito si verificherà su più richieste di seguito e in una scheda.

All’inizio ho pensato che si trattasse di un problema con il mio server, ma poi ho aperto due tabs IE e due tabs di Firefox e tutte si collegano e ricevono gli stessi eventi senza stallo. Solo Chrome ha questo tipo di problemi.

Immagino che questo sia probabilmente un problema con il modo in cui sto facendo o servendo la richiesta. Per riferimento, le intestazioni delle richieste hanno questo aspetto:

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 

La risposta è la seguente:

 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 

Nonostante le intestazioni coinvolte, non sto utilizzando l’EventSource nativo del browser, ma piuttosto un polyfill che mi consente di impostare intestazioni aggiuntive. Il polyfill sta usando XMLHttpRequest sotto le copertine, ma mi sembra che non importa come viene fatta la richiesta, non dovrebbe bloccarsi per 20 secondi.

Cosa potrebbe causare il blocco di Chrome in questo modo?

Modifica: Chrome’s chrome: // net-internals / # pagina degli eventi mostra che c’è un errore di timeout coinvolto:

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

Il messaggio di errore si riferisce a una patch aggiunta a Chrome sei mesi fa ( https://codereview.chromium.org/345643003 ), che implementa un timeout di 20 secondi quando la stessa risorsa viene richiesta più volte. Infatti, uno dei bug che la patch tenta di risolvere ( numero bug 46104 ) si riferisce a una situazione simile, e la patch ha lo scopo di ridurre il tempo speso in attesa.

È ansible che la risposta (o soluzione alternativa) qui sia solo per far apparire le richieste diverse, anche se forse Chrome potrebbe rispettare l’intestazione “senza cache” che sto impostando.