Http 请求头缓存策略和响应头之间的差异

Http 请求头缓存策略和响应头之间的差异,http,caching,amazon-web-services,header,amazon-s3,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-Modifi

我在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

为什么它们不同?这是否意味着缓存控制是错误的?我使用Chrome控制台获取标题。

我认为缓存控制没有错,而且您的内容似乎已经被缓存了。从请求头中,我了解到第一个请求是在2013年8月20日星期二13:08:13 GMT完成的,因为浏览器向服务器显示“嘿,从那时起内容有变化吗?”。作为回报,服务器用
304 Not Modified
头响应,表明内容未被更改,应该再缓存
604800
秒,直到重新验证它。请记住,缓存是在服务器端完成的。因此,您可能需要查看js文件上的服务器缺陷。通常,在部署环境中,我会指示我的web服务器为*.js*.png等发送缓存头。在配置web服务器以发送缓存头之后,浏览器的工作就是处理其余的事情。在这种情况下,您的浏览器将按预期工作


您可以查看304的响应。你可能还想看看。它应该会澄清一些想法。

问题在于Chrome。如果按“刷新”按钮,缓存将无效,但如果按地址栏中的Enter键,它将从缓存中获取资源。

我有点困惑。您是否在问,为什么即使您在客户端发送了缓存控制标头,服务器也会使用不同的缓存控制标头进行响应?我猜你是在期待这种情况发生?基本上,我希望我的js被缓存,这意味着这两个有不同的缓存控制