O Chrome para ao fazer várias solicitações ao mesmo recurso?
Estou tentando implementar uma pesquisa longa pela primeira vez e estou usando objetos XMLHttpRequest para fazer isso. Até agora, consegui obter eventos no Firefox e no Internet Explorer 11, mas o Chrome estranhamente é o estranho desta vez.
Eu posso carregar uma página e ela funciona muito bem. Ele faz a solicitação imediatamente e começa a processar e exibir eventos. Se eu abrir a página em uma segunda guia, uma das páginas começará a sofrer atrasos no recebimento de eventos. Na janela de ferramentas de desenvolvimento, vejo várias solicitações com esse tipo de tempo:
"Parado" varia até 20 segundos. Isso não acontecerá em todas as solicitações, mas geralmente ocorrerá em várias solicitações consecutivas e em uma guia.
No começo, pensei que esse era um problema com o meu servidor, mas então abri duas guias do IE e duas do Firefox, e todas elas se conectam e recebem os mesmos eventos sem parar. Somente o Chrome está tendo esse tipo de problema.
Acho que isso provavelmente é um problema com a maneira como estou fazendo ou atendendo à solicitação. Para referência, os cabeçalhos da solicitação são assim:
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
A resposta é assim:
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
Apesar dos cabeçalhos envolvidos, não estou usando o EventSource nativo do navegador, mas um polyfill que permite definir cabeçalhos adicionais. O polyfill está usando XMLHttpRequest nos bastidores, mas parece-me que não importa como a solicitação esteja sendo feita, ela não deve parar por 20 segundos.
O que pode estar fazendo com que o Chrome pare assim?
Editar: A página chrome: // net-internals / # events do Chrome mostra que há um erro de tempo limite envolvido:
t=33627 [st= 5] HTTP_CACHE_ADD_TO_ENTRY [dt=20001]
--> net_error = -409 (ERR_CACHE_LOCK_TIMEOUT)
A mensagem de erro refere-se a um patch adicionado ao Chrome seis meses atrás (https://codereview.chromium.org/345643003), que implementa um tempo limite de 20 segundos quando o mesmo recurso é solicitado várias vezes. De fato, um dos erros que o patch tenta corrigir (bug 46104) refere-se a uma situação semelhante, e o patch devereduzir o tempo gasto esperando.
É possível que a resposta (ou solução alternativa) aqui seja apenas para fazer com que as solicitações pareçam diferentes, embora talvez o Chrome possa respeitar o cabeçalho "sem cache" que estou definindo.