3

事实证明,在 Jetty 中,当您附加 cookie 时,它​​不仅将 cookie 添加到 HTTP 响应标头中,还更改了 Expires HTTP 标头的值!

((HttpServletResponse)response).addCookie(cookie);

我需要 Jetty 停止使用正确/正确的到期设置。

附带说明一下,是否有特定/充分的理由让它表现得像这样?我的猜测是,Jetty 假设如果设置了 cookie,则内容始终是动态的,因此应该设置为过期,以便它不会被缓存。

更新:使用Jetty 8.1.8.v20121106进行测试

4

1 回答 1

6

刚刚浏览了 Jetty 8 代码库。以下是代码库中的情况,其中 Expires(作为 HTTP 响应标头)被强制为一个值,或者如果存在则被删除。

  • 任何 HTTP 206 响应(强制删除,根据 RFC2616 规范)
  • 使用 org.eclipse.jetty.server.handler.MovedContextHandler(如果未设置则强制)
  • 在 Form Authentication 期间,如果需要响应错误,通过 Dispatch 处理(强制删除)
  • 在表单身份验证质询响应期间(强制删除)

这就是作为 HTTP 响应标头的 Expires。

但是,既然您指出这是 的一部分.addCookie(),我想指出,作为 Cookie 值字符串的一部分,还有一个 Cookie 规范 Expires 标头,可以在响应的 Set-Cookie 逻辑中找到。

Cookie.setMaxAge()如果值为 0 或更大,这将强制 Cookie Expires 标头。这样做是为了解决各种浏览器错误,这些错误在 Cookie 值上也提供Max-Age=之前不支持。Expires=

Cookie的默认行为:

  • Cookie.setMaxAge(-1);将同时禁用Max-Age=Expires=
  • Cookie.setMaxAge(0);将导致Expires=00:00:00 UTC on 1 January 1970(unix 纪元开始)
  • Cookie.setMaxAge(60000);将导致Expires=未来 1 分钟。

版本 1 Cookie 行为(又名Cookie.setVersion(1)):

  • Cookie.setMaxAge(-1);将同时禁用Max-Age=Expires=
  • Cookie.setMaxAge(0);将导致Max-Age=0and Expires=00:00:00 UTC on 1 January 1970(unix epoch 的开始)
  • Cookie.setMaxAge(60000);将导致Max-Age=60000未来Expires=1 分钟。
于 2013-03-14T14:09:03.353 回答