球衣过期标题不起作用

发布于 2025-01-02 19:39:08 字数 346 浏览 1 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

明媚殇 2025-01-09 19:39:08

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
< 

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:

Date exp = new Date(System.currentTimeMillis() + lifetime);
return Response.noContent().expires(exp).build();

When invoked with cURL, these are the returned headers:

< 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
< 
你列表最软的妹 2025-01-09 19:39:08

这是为了防止您的浏览器缓存所请求的资源。
日期本身是零秒的时间戳,即 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.

浅黛梨妆こ 2025-01-09 19:39:08

我发现我的应用程序服务器(在本例中为 JBoss 4.2.3.GA)不允许 Jersey 以这种方式覆盖标头。

解决方法:

  1. 使用参数将响应对象注入到方法中:

    <块引用>

    @Context javax.servlet.http.HttpServletResponse 响应

  2. 在响应对象上设置标头而不是使用 .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:

  1. Inject the response object into the method using a parameter:

    @Context javax.servlet.http.HttpServletResponse response

  2. Set the header on the response object rather than using .expires() :

    response.setDateHeader("Expires", System.currentTimeMillis() + 14400000);

I used #2 before I called .build() on the ResponseBuilder, not sure if it makes a difference or not when you do this.

淡淡绿茶香 2025-01-09 19:39:08

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

  1. 注入响应
    <代码>
    @Context javax.servlet.http.HttpServletResponse 响应

  2. 重置响应对象
    <代码>
    响应.重置();

  3. 使用 ResponseBuilder 设置标头。
    <代码>
    返回响应
    .ok(图标.getData())
    .type(icon.getContentType())
    .expires(cal.getTime())
    。建造();

I have the same issue. My workaround is:

  1. Inject the response

    @Context javax.servlet.http.HttpServletResponse response

  2. Reset the response object

    response.reset();

  3. Use the ResponseBuilder to set the headers.

    return Response
    .ok(icon.getData())
    .type(icon.getContentType())
    .expires(cal.getTime())
    .build();

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文