我正在使用Jersey bundle 1.11来提供一些RESTful Web服务。
每次我使用Chrome浏览REST资源时,我都会注意到HTTP Header Expires设置为星期四,01 Jan 1970 01:00:00 CET 。
我尝试编辑响应添加:
return Response.ok( myObject ).expires(new Date(System.currentTimeMillis() + 3000)).build();
不幸的是,这会增加另一个HTTP Header Expires,而不是替换旧的。
有什么问题?
答案 0 :(得分:1)
FWIW,我看到了完全相同的行为。这里的容器是JBoss 4.2.3。这是一种使用BASIC身份验证的PUT方法。我的回答是这样产生的:
Date exp = new Date(System.currentTimeMillis() + lifetime);
return Response.noContent().expires(exp).build();
使用cURL调用时,这些是返回的标题:
< HTTP/1.1 204 No Content
< Server: Apache-Coyote/1.1
< Pragma: No-cache
< Cache-Control: no-cache
< Expires: Thu, 01 Jan 1970 01:00:00 CET
< X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (...
< Expires: Tue, 13 Mar 2012 11:08:54 GMT
< Date: Tue, 13 Mar 2012 11:08:24 GMT
<
答案 1 :(得分:0)
这是为了防止您的浏览器缓存所请求的资源。 日期本身是零秒的时间戳,即UNIX时代的开始。
答案 2 :(得分:0)
我发现我的应用服务器(在这种情况下是JBoss 4.2.3.GA)不允许泽西以这种方式覆盖标题。
解决方法:
使用参数
将响应对象注入方法@Context javax.servlet.http.HttpServletResponse response
在响应对象上设置标题,而不是使用.expires():
response.setDateHeader(&#34; Expires&#34;,System.currentTimeMillis()+ 14400000);
我在ResponseBuilder上调用.build()之前使用了#2,不确定它是否会有所不同。
答案 3 :(得分:0)
我有同样的问题。我的解决方法是:
注入回复
@Context javax.servlet.http.HttpServletResponse response
重置响应对象
response.reset();
使用ResponseBuilder设置标头。
return Response
.ok(icon.getData())
.type(icon.getContentType())
.expires(cal.getTime())
.build();