gpt4 book ai didi

java - 使用 response.addCookie 时如何阻止 Jetty 更改 HTTP Expires header ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:50 46 4
gpt4 key购买 nike

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

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

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

旁注,是否有特殊/充分的理由让它表现得像这样?我的猜测是,Jetty 假设如果已设置 cookie,则内容始终是动态的,因此应将其设置为expired,这样它就不会被缓存。

更新使用 Jetty 8.1.8.v20121106 测试这个

最佳答案

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

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

这就是作为 HTTP 响应 header 的 Expires。

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

这将在 Cookie.setMaxAge() 时强制 Cookie Expires header 值为 0 或更大。这样做是为了解决各种不支持 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=60000和一个 Expires= future 1分钟。

关于java - 使用 response.addCookie 时如何阻止 Jetty 更改 HTTP Expires header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15400931/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com