请求标头缓存策略和响应标头之间的区别

时间:2013-08-20 14:52:42

标签: http caching amazon-web-services header amazon-s3

我在AWS上托管了一些js。我想缓存它以免为304 GET请求支付额外费用,但我很困惑为什么两个标题不同。

Request Method:GET
Status Code:304 Not Modified

helper.js的请求标头

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
If-Modified-Since:Tue, 20 Aug 2013 13:08:13 GMT

和响应标题

Age:4348
Cache-Control:max-age=604800
Connection:keep-alive

为什么他们不同?这是否意味着Cache-Control是错误的?我使用Chrome控制台来获取标题。

2 个答案:

答案 0 :(得分:0)

我不认为Cache-Control是错误的,而且您的内容似乎已经被缓存了。从请求标题中,我了解第一个请求是在Tue, 20 Aug 2013 13:08:13 GMT完成的,因为浏览器指示服务器“嘿,自那时起内容是否已更改?”。作为回报,服务器使用304 Not Modified标头进行响应,指示内容尚未更改,并且应该缓存604800秒,直到重新验证它为止。请记住,缓存是在服务器端完成的。因此,您可能希望查看js文件上的服务器defitinitons。通常,在部署环境中,我指示我的Web服务器为* .js * .png等发送缓存头。在配置Web服务器以发送缓存头之后,浏览器的工作就是处理剩下的事情。在这种情况下,您的浏览器将按预期工作。

您可以查看RFC2616以获取304响应。您可能还想查看this decent caching tutorial。它应该清楚一些想法。

答案 1 :(得分:0)

问题在于Chrome。如果按“刷新”按钮,则会使缓存失效,但如果在地址栏中按Enter,则会从缓存中获取资源。