2

我正在尝试缓存 servlet 响应,但不知何故它不起作用(每次刷新页面时,Firebug 都会给我 200 OK)。这是我在 servlet 中添加的代码:

response.setContentType("application/javascript");
long now = System.currentTimeMillis();
response.setCharacterEncoding("UTF-8");
response.setDateHeader("Last-Modified", 0);
response.addHeader("Cache-Control", "max-age=5184000");
response.setDateHeader("Expires", now + 5184000 * 1000);
response.addHeader("Vary", "Host");

我现在也尝试过 withsetHeader和 with Last-Modified

似乎没有任何效果。有任何想法吗?

谢谢

这就是萤火虫向我显示响应/请求标头的方式(当资源应该从缓存中获取但不是时):

 Response Headersview source
 Cache-Control  max-age=5184000
 Connection Keep-Alive
 Content-Type   application/javascript;charset=UTF-8
 Date   Thu, 21 Mar 2013 09:53:48 GMT
 Expires    Sun, 31 Mar 2013 16:51:01 GMT
 Keep-Alive timeout=15, max=99



 Request Headersview source
 Accept */*
 Accept-Encoding    gzip, deflate
 Accept-Language    en-US,en;q=0.5
 Cache-Control  max-age=0
4

1 回答 1

5

使用Last-Modified需要在您的 servlet 中进行协作编码。当您将其发送给客户端时,该客户端将在请求相同的资源时发回一组可能的标头之一:

  • If-Modified-Since:
  • If-Unmodified-Since:

您必须处理这些标头,确定自给定日期以来内容是否已更改,如果没有,则发送 304 响应。大量的手工工作。另请注意,Last-Modified日期必须有效(例如:)Tue, 15 Nov 1994 12:45:26 GMT

对您来说最简单的方法是暂时忽略Last-Modified,而使用Cache-ControlandExpires标头。您的Expires标题需要采用有效的日期格式,如Last-Modified标题所述。

您可以在这个出色的文档中阅读更多关于缓存的内容。

于 2013-03-21T10:07:51.880 回答