Solicitação HTTP retorna 200 OK, mas nenhum conteúdo em resposta

Ao desenvolver um site específico, tenho um problema intermitente ao carregar o site no Firefox (não foi possível comparar no IE ou no Chrome). O site carrega vários arquivos javascript, folhas de estilo css, imagens etc. Ocasionalmente, um ou mais arquivos não são carregados corretamente. A resposta indica um status de 200 OK, mas o comprimento do conteúdo indica 0. Isso acontece em arquivos diferentes em momentos diferentes. Quando é um arquivo javascript que não carrega, o site não funciona corretamente, mas ainda pode exibir o conteúdo. Quando o arquivo index.html falha ao carregar, o Firefox exibe uma página vazia com o seguinte html:

<html>
<head></head>
<body><pre></pre></body>
</html>

(Eu acredito que isso vem do Firefox como a visualização de página "vazia" padrão)

Parece que as cargas anteriores bem-sucedidas podem ser buscadas corretamente no cache do navegador e o status da resposta é 304 Não Modificado. Após uma falha, na próxima vez que o recurso for solicitado, vemos um status de resposta 200 OK, com solicitações subsequentes respondendo novamente com 304.

Aqui estão exemplos dos cabeçalhos de solicitação / resposta, conforme relatado pelo Firebug:

Caso Geral de Sucesso: (Status da resposta: 304 Não modificado, Comprimento do conteúdo: 288)

Cabeçalhos de solicitação:

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en/q=0.5
Connection: keep-alive
Cookie: JSESSIONID=<shouldn't matter>
Host: ???.???.???.???:8442
If-Modified-Since: Tue, 29 Apr 2014 13:18:26 GMT
If-None-Match: W/"228-1398777506000"
Referrer: https://???.???.???.???:8442/mySite/
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20131023 Firefox/17.0 

Cabeçalhos de resposta:

Cache-Control: no-cache
Date: Tue, 29 Apr 2014 13:36:35 GMT
Etag: W/"288-1398777506000"
Expires: Thu, 01 Jan 1970 00:00:00 GMT-00:00
Pragma: No-cache
Server: Apache-Coyote/1.1 

Cabeçalhos de resposta do cache:

Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 288
Content-Type: text/javascript
Date: Tue, 29 Apr 2014 13:36:35 GMT
Etag: W/"288-1398777506000"
Expires: Thu, 01 Jan 1970 00:00:00 GMT-00:00
Last-Modified: Tue, 29 Apr 2014 13:18:26 GMT
Pragma: No-cache
Server: Apache-Coyote/1.1 

A guia Cache no Firebug indica o seguinte:

Data Size: 288
Device: disk
Expires: Wed Dec 31 1969 18:00:00 GMT-06:00 (CST)
Fetch Count: 81
Last Fetched: Tue Apr 29 2014 08:28:35 GMT-05:00 (CDT)
Last Modified: Tue Apr 29 2014 08:28:35 GMT-05:00 (CDT) 

Caso com falha: (Status da resposta: 200 OK, comprimento do conteúdo: 0)

Cabeçalhos de solicitação:

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en/q=0.5
Connection: keep-alive
Cookie: JSESSIONID=<same as above>
Host: ???.???.???.???:8442
If-Modified-Since: Tue, 29 Apr 2014 13:18:26 GMT
If-None-Match: W/"228-1398777506000"
Referrer: https://???.???.???.???:8442/mySite/
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20131023 Firefox/17.0 

Cabeçalhos de resposta:

Content-Length: 0
Date: Tue, 29 Apr 2014 13:36:28 GMT
Server: Apache-Coyote/1.1 

A guia Cache no Firebug indica o seguinte:

Data Size: 
Device: disk
Expires: Wed Dec 31 1969 18:00:00 GMT-06:00 (CST)
Fetch Count: 83
Last Fetched: Tue Apr 29 2014 08:28:42 GMT-05:00 (CDT)
Last Modified: Tue Apr 29 2014 08:28:42 GMT-05:00 (CDT) 

Próximo Caso de Sucesso: (Status da resposta: 200 OK, comprimento do conteúdo: 288)

Cabeçalhos de solicitação:

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en/q=0.5
Connection: keep-alive
Cookie: JSESSIONID=<same as above>
Host: ???.???.???.???:8442
Referrer: https://???.???.???.???:8442/mySite/
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20131023 Firefox/17.0 

Cabeçalhos de resposta:

Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 288
Content-Type: text/javascript
Date: Tue, 29 Apr 2014 13:37:03 GMT
Etag: W/"288-1398777506000"
Expires: Thu, 01 Jan 1970 00:00:00 GMT-00:00
Last-Modified: Tue, 29 Apr 2014 13:18:26 GMT
Pragma: No-cache
Server: Apache-Coyote/1.1 

A guia Cache no Firebug indica o seguinte:

Data Size: 288
Device: disk
Expires: Wed Dec 31 1969 18:00:00 GMT-06:00 (CST)
Fetch Count: 85
Last Fetched: Tue Apr 29 2014 08:28:54 GMT-05:00 (CDT)
Last Modified: Tue Apr 29 2014 08:28:53 GMT-05:00 (CDT) 

Estamos hospedando o site no JBoss-EAP v6.1 e tentei isso no Firefox 10, 17 e 24 com os mesmos resultados. Entendo que existem versões mais recentes disponíveis (para não mencionar navegadores diferentes), mas elas não são necessariamente uma opção para nós. Espero que a solução seja uma alteração simples na configuração, mas nas minhas tentativas de procurar esse problema, não vi ninguém com o mesmo problema; portanto, pode não ser tão simples. Agradeço todas as sugestões. Além disso, informe-me se precisar fornecer mais informações (por exemplo, web.xml, jboss.conf etc.)

Outros produtos no mix:

Require.js v2.1.2Java 1.6CAS 3.2.1Atmosfera 2.1.3

Atualizar: Eu essencialmente descartei a possibilidade de um problema de cache. Eu implementei um processo de carregamento do módulo de bloqueio de cache, conforme sugerido noAPI RequireJS página e ainda vejo o problema. Desta vez, no entanto, em vez de todos os códigos de status 304, são todos os 200.

Atualização 2: Eu baixei a fonte do JBossWeb 7.2.0.Final e trabalhei na depuração desse problema. Aparentemente, existe uma classe chamada org.apache.coyote.http11.Http11ConnectionHandler que mantém um pool de instâncias Http11Processor, cada uma com seus próprios objetos Request e Response. Quando uma solicitação é concluída, o Http11Processor é "reciclado" e recolocado no pool.

Parece que pode haver um problema de encadeamento na lógica de reciclagem porque o Response.recycle deve definir o "comprometido" como false, mas meu ponto de interrupção (condicional) imediatamente após a chamada para response.recycle () para com response.committed = = verdadeiro. É isso que causa as respostas com falha posteriormente. Quando um Http11Processor que contém um objeto de resposta já confirmado, a resposta não pode ser usada para retornar nenhuma informação. Ele simplesmente responde com Status: 200, Comprimento do conteúdo: 0.

Isso parece estar acontecendo quando eu fecho um site que possui uma conexão Atmosphere que usa Eventos do Lado do Servidor.Estou usando a conexão Atmosphere incorretamente? Existe uma lógica de limpeza especial que devo implementar?

questionAnswers(2)

yourAnswerToTheQuestion