【问题标题】:How to make HTTP Cache Headers Work如何使 HTTP 缓存头工作
【发布时间】:2010-07-23 15:13:20
【问题描述】:

有人可以帮我解决一个 HTTP 缓存问题吗?

我想如果我设置了“Expires”和“Cache-Control:max-age”请求头,那么浏览器在 max-age 过去之前不会发出 GET 请求?

我的服务器看到大量有条件的 GET 请求,它以 304 回复。但是,我想尽可能消除这些有条件的 GET,让浏览器仅在认为资源已过期时才请求资源。

以下是我从 Chrome 中的开发者工具中获得的详细信息:

Request URL:http://localhost:8080/img/branding.gif
Request Method:GET
Status Code:304 Not Modified

请求标头:

Cache-Control:max-age=0
If-Modified-Since:Thu, 22 Jul 2010 10:54:34 GMT
Referer:http://localhost:8080/
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4

响应标头:

Cache-Control:max-age=2246400, s-maxage=0
Connection:Keep-Alive
Content-Location:/img/branding.gif
Content-Type:image/gif
Date:Fri, 23 Jul 2010 15:06:10 GMT
Expires:Fri, 07 Jan 2011 15:06:10 GMT
Keep-Alive:timeout=15, max=100
Last-Modified:Thu, 22 Jul 2010 10:54:34 GMT
Pragma:cache
Server:Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)

我在我的 Java 代码中的过滤器中设置了缓存标头。代码在Oracle的OC4J上运行。

另外,我想通过 HTTPS 运行它。对 HTTPS 也可以使用相同的标头吗?

提前致谢。

【问题讨论】:

  • 您发送的标题接缝正确。它们在您的浏览器中工作吗?我猜你在日志中看到的请求来自(人们第一次访问你的页面,人们点击 Strg+F5 来重新加载页面,搜索机器人可能会忽略缓存)
  • 不,我已经在本地测试过了。我清除本地浏览器缓存。然后我加载页面。我看到页面上所有图片的请求都包含 200 个返回码。然后我点击刷新,我看到页面上所有图像的条件获取,所有图像都有 304 返回码。
  • 你能换个浏览器试试吗?

标签: java oc4j http-caching


【解决方案1】:

删除“Last-Modified”标题。如果该标头存在,某些浏览器总是发送条件 GET。

【讨论】:

  • 您有资源可以验证这一点吗?
  • 没有。我们在测试过程中得出了这个结论。我们的绩效团队告诉我们删除动态页面的标题。
【解决方案2】:

可能是 s-maxage=0 吗?你能把它丢掉,还是和maxage一样设置?

条件获取可能来自代理,或者来自以某种方式决定充当代理的浏览器。我承认,这似乎不太可能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2011-09-01
    • 2010-12-02
    相关资源
    最近更新 更多