Dlaczego niektóre żądania stron zawieszają się podczas pobierania zasobów Javascript / obrazu przy użyciu Safari i Apache 2.2.3?

Niektórzy użytkownicy naszej aplikacji Ruby on Rails skarżyli się, że żądania stron czasami zawieszają się w Safari na czas nieokreślony (para zauważyła to w Firefoksie, ale w przeważającej mierze jest to użytkownik Safari). Po pewnym dochodzeniu wydaje się, że te żądania są poprawnie obsługiwane przez naszą aplikację Rails i zawieszenie następuje podczas pobierania zasobów obrazu (które są hostowane na tym samym serwerze), do których odwołuje się w HTML.

Skonfigurowaliśmy Apache, aby bezpośrednio obsługiwał zasoby obrazu i pomijał aplikację Rails w celu zwiększenia wydajności. Włączono także kompresję gzip dla zasobów text / javascript / css. Poniżej znajdują się odpowiednie ustawienia z naszej konfiguracji Apache Virtual Host - być może skonfigurowaliśmy to w taki sposób, aby wyjaśnić te dowolne wiszące żądania?

RewriteEngine On

# Correct behaviour of IE under SSL
SetEnvIf User-Agent ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

SSLEngine On
SSLCertificateFile /etc/httpd/conf/ssl/_.mycert.com.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/_. mycert.com.key
SSLCertificateChainFile /etc/httpd/conf/ssl/gd_bundle.crt

RequestHeader set X_ORIGINAL_PROTOCOL 'https'
RequestHeader set X_FORWARDED_PROTO 'https'

# Rewrite index to check for static
RewriteRule ^/$ /index.html [QSA] 
RewriteRule "^/(images|stylesheets|javascripts|system)/?(.*)" "$0" [L]

# Rewrite to check for Rails cached page
RewriteRule ^([^.]+)$ $1.html [QSA]

# Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

ExpiresActive On
<FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
  ExpiresDefault "access plus 1 year"
  Header append Cache-Control "public"
</FilesMatch>

Czy ktoś wcześniej doświadczył podobnego problemu?

Nasza aplikacja internetowa Ruby on Rails działa przy użyciu mod_rails i Apache 2.2.3 w RedHat Enterprise Linux 5.

Aktualizacja: Próbowałem teraz usunąć następujący blok, a problem nadal występuje, więc wygląda na to, że możemy wykluczyć, że nagłówek wygasania jest problemem:

ExpiresActive On
<FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
  ExpiresDefault "access plus 1 year"
  Header append Cache-Control "public"
</FilesMatch>

questionAnswers(5)

yourAnswerToTheQuestion