Какие заголовки я должен отправлять для полной остановки всех запросов к серверу после того, как содержимое было кэшировано?
У нас есть сервер с очень высокой задержкой (Sigh, VMWare), поэтому даже отправка HEAD
запроса на сервер занимает + 40 мс.
В настоящее время это отправляемые / получаемые заголовки;
Первый запрос
Клиент отправляет;
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
Сервер отвечает;
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
Таким образом , он посылает Cache-Control
и Expires
набор заголовков 365 дней в будущем. К сожалению, при втором обновлении он снова запрашивает объект с If-Modified-Since
заголовком.
Второй запрос
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
Отклик;
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
К сожалению, из-за глупо устаревшего программного обеспечения прокси мы не можем использовать Keep-Alive
или ставить какие-либо другие серверы / прокси перед приложением. Мы также не можем улучшить производительность сервера и уменьшить задержки в сети. Я пытался выяснить, какие заголовки мы можем отправить, чтобы избавиться от 301 запроса. Я пытался использовать ETag, но это не имеет значения, он все еще отправляет If-modified-since
заголовок. Я также попытался удалить Last-Modified
заголовок, но это просто вызывает стандартный запрос GET без кэширования (проверил логи, сервер все еще получает запросы).
Клиенты - это смесь Firefox (в основном), IE 7, 8 и (некоторые) 9, Chrome и Safari, но такое поведение, похоже, проявляется во всех протестированных браузерах.
TL; DR;
Ужасная сеть, какие заголовки я должен отправлять, чтобы сказать клиентам никогда не отправлять If-modified-since
запросы на сервер для проверки их кэша и сохранять содержимое в кэше до тех пор, пока Expires
заголовок не будет встречен?
Я, наверное, упускаю что-то очевидное, но все, что я пытаюсь, похоже, дает те же результаты.
У нас есть сервер NGINX, расположенный напротив нашего сервера приложений, поэтому я могу добавлять / удалять любые заголовки по своему усмотрению. Наш прокси не поддерживает Keep-Alive и не может улучшить производительность сети. Из-за ужасного дизайна программного обеспечения веб-приложение загружает +100 ресурсов на каждую загрузку страницы (да, корпоративное программное обеспечение отстает) с задержкой ~ 40-50 мс на объект.
text/plain
?