如果我配置了过期和缓存控制标头,为什么我的浏览器会发出请求?

时间:2013-03-27 13:12:55

标签: http caching amazon-s3

这是我的亚马逊水桶的示例回复。

$ curl -I http://amazon_bucket/image.jpg
HTTP/1.1 200 OK
x-amz-id-2: Tmr9SynKe8ztlB/Jix1hNrclwyc/k4NVHyqK3B0vNKUoPFIxfzwALi0XQRwEjhzO
x-amz-request-id: DCFDBCF510988AFB
Date: Wed, 27 Mar 2013 13:06:34 GMT
Cache-Control: public, max-age=2629000
Expires: Wed, 26 Mar 2014 23:00:00 GMT
Last-Modified: Wed, 27 Mar 2013 13:00:19 GMT
ETag: "52dd53ea738c7824b3f67cfea6a3af2a"
Accept-Ranges: bytes
Content-Type: image/jpeg
Content-Length: 627046
Server: AmazonS3

我希望浏览器缓存图像并从缓存中提供它。相反,当我重新加载页面时,我的浏览器会执行一个请求,这会产生304未修改的响应。为什么它会像must-revalidate选项一样被传递?为什么浏览器不直接从缓存提供图像?我在S3客户端上配置的图像选项包括:

Cache-Control: public, max-age=2629000
Expires: Wed, 26 Mar 2014 23:00:00 GMT

还有其他选项我应该传递给S3文件吗?这可能是一个愚蠢的答案,但我看到我的浏览器获取这些图片的请求都有以下标题:

Cache-Control:no-cache
Pragma:no-cache

为什么我的浏览器会发送这些内容?

1 个答案:

答案 0 :(得分:2)

我正在刷新,显然,这总是会触发If-Modified-Since请求。如果您正常访问该页面,则资产将从浏览器缓存中提供。