Java 球衣头部不工作

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

我正在使用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头,而不是替换旧的头


有什么问题吗?

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以这种方式覆盖标题

解决方法:

  • 使用参数将响应对象注入方法:

    @上下文javax.servlet.http.HttpServletResponse

  • 在响应对象上设置标头,而不是使用.expires()

    response.setDateHeader(“Expires”,System.currentTimeMillis()+14400000)


  • 在对ResponseBuilder调用.build()之前,我使用了#2,但不确定这样做是否会产生影响。

    我也有同样的问题。我的解决方法是:

  • 注入响应
    
    @上下文javax.servlet.http.HttpServletResponse
    

  • 重置响应对象
    
    response.reset();
    

  • 使用ResponseBuilder设置标题。
    
    返回响应
    .ok(icon.getData())
    .type(icon.getContentType())
    .expires(cal.getTime())
    .build();
    


  • 听起来可能是个bug。默认情况下,header不会添加到任何位置,必须有其他逻辑,或者可能是由您的容器添加的-检查其设置/文档。。