Jakie nagłówki mam wysłać, aby całkowicie zatrzymać wszystkie żądania na serwerze po buforowaniu treści?
Mamy serwer o bardzo dużych opóźnieniach (Sigh, VMWare), więc nawet wysłanie HEAD
żądania na serwer zajmuje + 40 ms.
Obecnie są to nagłówki wysyłane / odbierane;
Pierwsza prośba
Klient wysyła;
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
Serwer odpowiada;
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
Wysyła więc nagłówek Cache-Control
i Expires
ustawiony na 365 dni w przyszłości. Niestety przy drugim odświeżeniu żąda ponownie obiektu z If-Modified-Since
nagłówkiem.
Druga prośba
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
Odpowiedź;
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
Niestety z powodu głupiego, przestarzałego oprogramowania proxy, z którego nie możemy korzystać Keep-Alive
ani umieszczać innych aplikacji / serwerów przed aplikacją. Nie możemy również poprawić wydajności serwera i zmniejszyć opóźnień sieci. Próbowałem dowiedzieć się, jakie nagłówki możemy wysłać, aby pozbyć się 301 żądań. Próbowałem użyć ETags, ale to nie robi różnicy, wciąż wysyła If-modified-since
nagłówek. Próbowałem również usunąć Last-Modified
nagłówek, ale powoduje to standardowe żądanie GET bez buforowania (sprawdzone dzienniki, serwer nadal otrzymuje żądania).
Klienci to mieszanka Firefox (głównie), IE 7, 8 i (niektóre) 9, Chrome i Safari, ale takie zachowanie wydaje się występować we wszystkich testowanych przeglądarkach.
TL; DR;
Okropna sieć, jakie nagłówki mam wysłać, aby powiedzieć klientom, aby nigdy nie wysyłali If-modified-since
do serwera żądań w celu sprawdzenia ich pamięci podręcznej i przechowywania zawartości w pamięci podręcznej do momentu Expires
spełnienia nagłówka?
Prawdopodobnie brakuje mi czegoś oczywistego, ale wszystko, co próbuję, wydaje się przynosić takie same wyniki.
Serwer NGINX znajduje się przed naszym serwerem aplikacji, więc mogę dodawać / usuwać dowolne nagłówki według własnego uznania. Nasz serwer proxy nie obsługuje Keep-Alive i nie ma sposobu na poprawę wydajności sieci. Z powodu okropnego projektowania oprogramowania aplikacja internetowa ładuje +100 zasobów przy każdym ładowaniu strony (tak, oprogramowanie korporacyjne jest do bani) z opóźnieniem ~ 40-50ms na obiekt.
text/plain
?