Podczas tworzenia strony internetowej mam sporadyczny problem podczas ładowania strony w przeglądarce Firefox (nie mogłem porównać w IE lub Chrome). Witryna ładuje kilka plików javascript, arkusze stylów CSS, obrazy itp. Czasami jeden lub więcej plików nie ładuje się poprawnie. Odpowiedź wskazuje status 200 OK, ale długość zawartości wskazuje 0. Dzieje się to w różnych plikach o różnych porach. Gdy jest to plik javascript, który nie może się załadować, witryna nie działa poprawnie, ale nadal może wyświetlać treść. Kiedy zdarza się plik index.html, że nie można załadować, Firefox wyświetla pustą stronę z następującym HTML:Żądanie HTTP zwraca 200 OK, ale brak treści w odpowiedzi
<html>
<head></head>
<body><pre></pre></body>
</html>
(wierzę, że to pochodzi z Firefoksa jako domyślną „pusty” Odsłona)
Wygląda na to, że poprzednie pomyślne obciążenia mogły zostać poprawnie pobrane z pamięci podręcznej przeglądarki, a stan odpowiedzi to 304 Nie zmodyfikowano. Po niepowodzeniu, przy następnym żądaniu zasobu widzimy status odpowiedzi 200 OK, a kolejne żądania ponownie odpowiadają 304.
Oto przykłady nagłówków żądania/odpowiedzi jak donosi Firebug:
Ogólne Success Case (Stan Response: 304 Not Modified, Content-Length: 288)
Żądanie Nagłówki:
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
odpowiedzi Nagłówki:
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
nagłówki odpowiedzi z pamięci podręcznej:
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
Zakładka Cache w Firebug wskazuje następujące:
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)
Failed koperty: (status odpowiedzi: 200 OK Content-Length: 0)
Żądanie Nagłówki:
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
Response Nagłówki:
Content-Length: 0
Date: Tue, 29 Apr 2014 13:36:28 GMT
Server: Apache-Coyote/1.1
Zakładka Cache w Firebug oznacza:
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)
kolejny sukces przypadków: (status odpowiedzi: 200 OK Content-Length: 288)
Żądanie Nagłówki:
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
Response Nagłówki:
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
Zakładka Cache w Firebug wskazuje następujące:
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)
Jesteśmy gospodarzem stronę w JBoss EAP-v6.1, a ja próbowałem to w Firefoksie 10, 17 i 24 z tych samych wyników. Rozumiem, że dostępne są nowsze wersje (nie wspominając o różnych przeglądarkach), ale niekoniecznie są one dla nas opcją. Mam nadzieję, że rozwiązanie to prosta zmiana konfiguracji, ale w moich próbach poszukiwania tego problemu nie widziałem nikogo, kto miałby ten sam problem, więc może nie być tak proste. Doceniam wszelkie sugestie. Ponadto daj mi znać, jeśli chcę podać więcej informacji (np. Web.xml, jboss.conf, etc)
Inne produkty z tej mieszanki:
- Require.js v2.1.2
- Java 1.6
- CAS 3.2.1
- Atmosfera 2.1.3
Aktualizacja: W zasadzie wykluczyłem możliwość wystąpienia problemu z pamięcią podręczną. Zaimplementowałem proces ładowania modułu pomijania pamięci podręcznej zgodnie z sugestią na stronie RequireJS API i nadal widzę problem. Tym razem jednak zamiast wszystkich 304 kodów stanu, wszystkie mają wartość 200.
Aktualizacja 2: Pobrałem źródła JBossWeb 7.2.0.Final i pracował przez debugowanie ten problem. Najwyraźniej istnieje klasa o nazwie org.apache.coyote.http11.Http11ConnectionHandler, która utrzymuje pulę instancji Http11Processor, z których każdy ma własne obiekty żądania i odpowiedzi. Po zakończeniu żądania procesor Http11Processor jest "poddawany recyklingowi" i ponownie wprowadzany do puli.
Wygląda na to, że w logice recyklingu może występować problem z gwintowaniem, ponieważ Response.recycle ma ustawić "commit" na false, ale mój (warunkowy) punkt przerwania natychmiast po wywołaniu response.recycle() zatrzymuje się z response.citted == true. To właśnie powoduje późniejsze nieudane odpowiedzi. Gdy procesor Http11, który zawiera już zatwierdzony obiekt odpowiedzi, odpowiedzi nie można użyć do zwrócenia jakichkolwiek informacji. Po prostu odpowiada Stan: 200, Długość treści: 0.
Wydaje się, że dzieje się tak, gdy zamykam stronę internetową, która ma połączenie Atmosphere, które wykorzystuje zdarzenia Side Side. Czy nieprawidłowo używam połączenia Atmosfera? Czy powinienem wprowadzić specjalną logikę oczyszczania?
cześć, używam jboss eap 6.4, primefaces 5.3 i atmosphere 2.4.8. Mam dokładnie taki sam problem, jak ty, ale po dodaniu właściwości org.apache.catalina.connector.RECYCLE_FACADES do standalone.xml, napotkałem wyjątek (Interceptor Atmosphere LifeCycle uległo awarii.Proces przetwarzania będzie kontynuowany z innym przechwytywaczem: java.lang .IllegalStateException: JBWEB000057: Obiekt żądania został poddany recyklingowi i nie jest już powiązany z tą fasadą). czy napotkałeś podobny problem? – bluebloodedboy
Widziałem ten wyjątek. Wykonałem wiele innych prac związanych z Atmosphere, które czyści instancje AtmosphereResource, głównie z tego powodu, że używam BlockingIOCometSupport (tylko z powodu braku wsparcia AsyncIO). W naszej aplikacji jest wystarczająco dużo jazdy rowerem przez AtmosphereResources, że ten wyjątek nie spowodował żadnych drastycznych problemów (które zauważyliśmy). – pacifier21