Предотвращение ненужных запросов If-Modified-Since и ответов 304 на Amazon S3

Я использую AWS SDK для .NET для загрузки нескольких изображений. Прежде чем сделать PutObjectRequest, я устанавливаю заголовки max-age и expires для интервалов и дат далекого будущего соответственно.

Это начальный запрос изображения:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:assets.mywebsite.com.s3-us-west-1.amazonaws.com
If-Modified-Since:Sun, 19 Feb 2012 18:36:48 GMT
If-None-Match:"f19920f9367b698451d6c964d3ae714a"
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11

Вот ответ S3. Он возвращает правильные заголовки кэширования:

Accept-Ranges:bytes
Cache-Control:public, max-age=31536000
Content-Length:9180
Content-Type:image/jpeg
Date:Sun, 19 Feb 2012 19:16:18 GMT
ETag:"f19920f9367b698451d6c964d3ae714a"
Expires:Sat, 19 Feb 2022 18:36:48 GMT
Last-Modified:Sun, 19 Feb 2012 18:36:48 GMT
Server:AmazonS3

Однако каждый последующий запрос по-прежнему приводит к ошибке 304 (а не 200 из кеша):

Status Code:304 Not Modified

Обратите внимание, я не нажимаю F5.

Я читал, что когда вы смешиваете ETags и Expires/Cache-Control, ETags обычно используются для каждого запроса и полностью игнорируют кэширование. Я также читал, что нет возможности отключить ETags в S3.

Я просто пытаюсь увеличить скорость и снизить затраты. Прежде чем сдаться, я решил спросить сообщество SO.

Любые идеи о том, как предотвратить 304?

ОБНОВЛЕНИЕ:

Похоже, что браузеры становятся все более изощренными в плане кэширования. Как указывает marcind, это проблема клиентского браузера. После тестирования в других браузерах и различных сценариях (например, загрузка изображения непосредственно в хром (запрос URL-адреса изображения), а не просто просмотр изображения при наличии веб-страницы имеет разные эффекты)


person Scott Coates    schedule 19.02.2012    source источник


Ответы (1)


Какие заголовки выходят с последующими запросами? Похоже, ваш клиент отправляет If-Modified-Since или что-то подобное.

обновление: поскольку ваш клиент отправляет If-Modified-Since, Amazon поступает правильно. Это похоже на проблему с вашим клиентом.

person marcind    schedule 19.02.2012
comment
Извините, я забыл включить запрос в свой пост. Да, он отправляет как if-modified-since, так и if-none-match. - person Scott Coates; 19.02.2012