0

我在 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 控制台来获取标题。

4

2 回答 2

0

问题出在 Chrome 上。如果您按刷新按钮,它会使缓存无效,但如果您在地址栏中按 Enter,它会从缓存中获取资源。

于 2013-08-21T10:25:03.450 回答
0

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

您可以查看RFC2616以获取 304 响应。您可能还想看看这个不错的缓存教程。它应该清除一些想法。

于 2013-08-20T15:12:29.003 回答