Java 球衣头部不工作
我正在使用Jersey bundle 1.11提供一些RESTful web服务 每次我用Chrome浏览REST资源时,我注意到有一个HTTP头Expires设置为Thu,1970年1月1日01:00:00 CET 我尝试编辑响应并添加:Java 球衣头部不工作,java,rest,jersey,jax-rs,Java,Rest,Jersey,Jax Rs,我正在使用Jersey bundle 1.11提供一些RESTful web服务 每次我用Chrome浏览REST资源时,我注意到有一个HTTP头Expires设置为Thu,1970年1月1日01:00:00 CET 我尝试编辑响应并添加: return Response.ok( myObject ).expires(new Date(System.currentTimeMillis() + 3000)).build(); 不幸的是,这会添加另一个HTTP头,而不是替换旧的头 有什么问题吗?F
return Response.ok( myObject ).expires(new Date(System.currentTimeMillis() + 3000)).build();
不幸的是,这会添加另一个HTTP头,而不是替换旧的头
有什么问题吗?FWIW,我看到了完全相同的行为。这里的容器是JBoss4.2.3。这是一个具有基本身份验证的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
<
这是为了防止浏览器缓存请求的资源。
日期本身是零秒的时间戳,是UNIX时代的开始。我发现我的应用服务器(在本例中是JBoss 4.2.3.GA)不允许Jersey以这种方式覆盖标题 解决方法:
在对ResponseBuilder调用.build()之前,我使用了#2,但不确定这样做是否会产生影响。我也有同样的问题。我的解决方法是:
@上下文javax.servlet.http.HttpServletResponse
response.reset();
返回响应
.ok(icon.getData())
.type(icon.getContentType())
.expires(cal.getTime())
.build();
听起来可能是个bug。默认情况下,header不会添加到任何位置,必须有其他逻辑,或者可能是由您的容器添加的-检查其设置/文档。。