使用response.addCookie时,如何阻止Jetty更改HTTP Expires标头?

Jac*_*cob 3 java cookies jetty java-ee

事实证明,在Jetty中,当你附加一个cookie时,它不仅会向HTTP响应头添加一个cookie,它还会改变Expires HTTP头的值!

((HttpServletResponse)response).addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)

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

另一方面,是否有一个特殊/充分的理由让它表现得像这样?我的猜测是Jetty假设如果设置了cookie,内容总是动态的,因此应设置为过期,以便不缓存.

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

Joa*_*elt 5

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

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

这就是Expires作为HTTP响应标头.

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

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

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=0Expires=00:00:00 UTC on 1 January 1970(unix时代的开始)
  • Cookie.setMaxAge(60000);将导致Max-Age=60000Expires=在未来1分钟.

  • 不是秒吗?即 60000 将是 1000 分钟而不是 1 分钟? (2认同)