球衣过期标题不起作用
我正在使用 Jersey 捆绑包 1.11 来提供一些 RESTful Web 服务。
每次我使用 Chrome 浏览 REST 资源时,我都会注意到 HTTP 标头过期时间设置为 Thu, 01 Jan 1970 01:00:00 CET。
我尝试编辑响应添加:
return Response.ok( myObject ).expires(new Date(System.currentTimeMillis() + 3000)).build();
不幸的是,这添加了另一个 HTTP 标头过期,而不是替换旧的。
问题是什么?
I'm using Jersey bundle 1.11 to provide some RESTful web service.
Each time I browse a REST resource with Chrome, I notice that there's an HTTP Header Expires set to Thu, 01 Jan 1970 01:00:00 CET.
I tried to edit the Response adding:
return Response.ok( myObject ).expires(new Date(System.currentTimeMillis() + 3000)).build();
Unfortunately, this adds another HTTP Header Expires instead of replacing the old one.
What is the problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
FWIW,我看到了完全相同的行为。这里的容器是JBoss 4.2.3。这是具有 BASIC 身份验证的 PUT 方法。我的响应是这样生成的:
当使用 cURL 调用时,这些是返回的标头:
FWIW, I am seeing the exact same behaviour. The container here is JBoss 4.2.3. This is a PUT method with BASIC authentication. My response is generated thus:
When invoked with cURL, these are the returned headers:
这是为了防止您的浏览器缓存所请求的资源。
日期本身是零秒的时间戳,即 UNIX 时代的开始。
This is to prevent your browser from caching of the requested resource.
The date itself is the timestamp with zero seconds, the begin of the UNIX era.
我发现我的应用程序服务器(在本例中为 JBoss 4.2.3.GA)不允许 Jersey 以这种方式覆盖标头。
解决方法:
使用参数将响应对象注入到方法中:
<块引用>
@Context javax.servlet.http.HttpServletResponse 响应
在响应对象上设置标头而不是使用 .expires() :
<块引用>
response.setDateHeader("过期", System.currentTimeMillis() + 14400000);
在 ResponseBuilder 上调用 .build() 之前,我使用了#2,不确定这样做是否会产生影响。
I found that my app server (In this case JBoss 4.2.3.GA) would not allow Jersey to overwrite the header this way.
To workaround:
Inject the response object into the method using a parameter:
Set the header on the response object rather than using .expires() :
I used #2 before I called .build() on the ResponseBuilder, not sure if it makes a difference or not when you do this.
我有同样的问题。我的解决方法是:
注入响应
<代码>
@Context javax.servlet.http.HttpServletResponse 响应
重置响应对象
<代码>
响应.重置();
使用 ResponseBuilder 设置标头。
<代码>
返回响应
.ok(图标.getData())
.type(icon.getContentType())
.expires(cal.getTime())
。建造();
I have the same issue. My workaround is:
Inject the response
@Context javax.servlet.http.HttpServletResponse response
Reset the response object
response.reset();
Use the ResponseBuilder to set the headers.
return Response
.ok(icon.getData())
.type(icon.getContentType())
.expires(cal.getTime())
.build();