2013-03-14 101 views
2

事实证明,在Jetty中,当你附加一个cookie时,它不仅会向HTTP响应头添加一个cookie,还会改变Expires HTTP头的值!如何在使用response.addCookie时停止Jetty更改HTTP Expires标头?

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

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

在旁注中,是否有特定的/充分的理由表现得像这样?我的猜测是,Jetty认为如果Cookie已设置,则内容始终是动态的,因此应该设置为已过期,以便它不被缓存。

更新:测试此使用码头8.1.8.v20121106

+0

如果您先添加cookie,然后设置“过期”,该怎么办?码头还会乱七八糟吗? – ZhongYu 2013-03-14 04:03:20

+0

你使用什么版本的Jetty? – Perception 2013-03-14 04:04:17

+0

Doh!我的意思是添加码头版本,但忘记了,即时使用上个月的最新版本(Jetty 8.1.8.v20121106)。我应该检查是否有更新的版本(不能等待9出来) – Jacob 2013-03-14 04:06:29

回答

5

就率先通过了码头8代码库散步。 以下是代码中的情况,其中Expires(作为HTTP响应标头)被强制为一个值,或者如果存在,则将其删除。

  • 任何HTTP响应206(强制拆除,每RFC2616规范)
  • 使用org.eclipse.jetty.server.handler.MovedContextHandler的(如果不设置强制)
  • 在窗体身份验证,如果需要一个错误响应,经由调度处理(强制去除)
  • 期间表单认证质询响应(强制去除)

以上就是过期作为HTTP响应头。

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

如果Cookie.setMaxAge()的值为0或更大,这将强制Cookie过期标头。这样做是为了解决各种浏览器错误,这些错误不会兑现Max-Age=,直到在Cookie值上也提供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=0Expires=00:00:00 UTC on 1 January 1970(UNIX历元的开始)
  • Cookie.setMaxAge(60000);将导致在Max-Age=60000Expires=未来1分钟。
+0

太棒了!我认为会产生一些怪癖,导致这种行为被建立在内。希望我可以让你更多(: – Jacob 2013-03-15 04:26:48

+1

是不是在几秒钟?即60000将是1000分钟,而不是1分钟? – Thomas 2014-11-25 13:32:31