Welche Header sollte ich senden, um alle Anforderungen an den Server zu stoppen, nachdem der Inhalt zwischengespeichert wurde?
Wir haben einen Server mit sehr hoher Latenz (Sigh, VMWare), sodass das Senden einer HEAD
Anfrage an den Server + 40ms dauert.
Derzeit werden die Header gesendet / empfangen.
Erste Anfrage
Client sendet;
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Pragma: no-cache, no-cache, no-cache
Cache-Control: no-cache, no-cache, no-cache
Server antwortet;
HTTP/1.1 200 OK
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:51:51 GMT
Content-Type: text/plain
Vary: Accept-Encoding
Last-Modified: Tue, 31 Jan 2012 10:45:11 GMT
Content-Length: 14
Expires: Thu, 31 Jan 2013 14:51:51 GMT
Cache-Control: max-age=31536000
Es wird also ein Cache-Control
und ein Expires
Header gesendet, der auf 365 Tage in der Zukunft festgelegt ist. Leider fordert es bei der zweiten Aktualisierung das Objekt erneut mit einem If-Modified-Since
Header an.
Zweite Anfrage
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
If-Modified-Since: Tue, 31 Jan 2012 10:45:11 GMT
Cache-Control: max-age=0
Antwort;
HTTP/1.1 304 Not Modified
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:58:00 GMT
Vary: Accept-Encoding
Expires: Thu, 31 Jan 2013 14:58:00 GMT
Cache-Control: max-age=31536000
Leider können wir aufgrund alberner veralteter Proxy-Software Keep-Alive
keine anderen Server / Proxys vor die Anwendung stellen. Wir können auch die Leistung des Servers nicht verbessern und die Netzwerklatenz nicht reduzieren. Ich habe versucht herauszufinden, welche Header wir senden können, um die 301-Anfragen loszuwerden. Ich habe versucht, ETags zu verwenden, aber das macht keinen Unterschied, es sendet immer noch einen If-modified-since
Header. Ich habe auch versucht, den Last-Modified
Header zu entfernen, aber dies führt nur zu einer Standard-GET-Anforderung ohne Zwischenspeicherung (Protokolle überprüft, Server empfängt weiterhin Anforderungen).
Clients sind eine Mischung aus Firefox (meistens), IE 7, 8 und (einigen) 9, Chrome und Safari, aber dieses Verhalten scheint in allen getesteten Browsern aufzutreten.
TL; DR;
Schreckliches Netzwerk, welche Header sollte ich senden, um Clients anzuweisen, niemalsIf-modified-since
Anfragen an den Server zu senden , um ihren Cache zu validieren und den Inhalt zwischenzuspeichern, bis der Expires
Header erfüllt ist?
Ich vermisse wahrscheinlich etwas Offensichtliches, aber alles, was ich versuche, scheint zu den gleichen Ergebnissen zu führen.
Wir haben einen NGINX-Server vor unserem Anwendungsserver, sodass ich nach Belieben Header hinzufügen / entfernen kann. Unser Proxy unterstützt Keep-Alive nicht und es gibt keine Möglichkeit, die Netzwerkleistung zu verbessern. Aufgrund des schlechten Softwaredesigns lädt die Web-App bei jedem Seitenaufruf +100 Ressourcen (Ja, Unternehmenssoftware saugt) mit einer Latenz von ~ 40-50 ms pro Objekt.
text/plain
?