Ern*_*dis 13 java cookies servlets http glassfish-5
我注意到Glassfish-5 Web服务器仅使用一个Set-Cookie标头发送响应,其中包含多个cookie.当我用萤火虫看时,我可以看到它们被未知的角色分开.无论如何 - Firefox只读取第一个cookie.如何配置Glassfish5发送多个Set-Cookie标头 - 每个cookie一个?rfc6265指出:
- 概述
...
源服务器不应该将多个Set-Cookie头字段折叠到单个头字段中.折叠HTTP头字段的常用机制(即,如[RFC2616]中所定义)可能会更改Set-Cookie头字段的语义,因为Set-Cookie以一种冲突的方式使用%x2C(",")字符有这样的折叠.
...
此外在这里它指出:
当发送带有多个cookie的HTTP响应时,CFHTTPMessage将cookie组合到单个"Set-Cookie"HTTP头下的逗号分隔列表中.(这被称为"set-cookie-folding".)
Google Chrome,Firefox和Internet Explorer不支持设置Cookie折叠.这些浏览器中的每一个都会在第一个逗号后完全忽略每个cookie,使得CFHTTPMessage完全无用于在除Safari之外的任何浏览器中处理具有多个cookie的HTTP响应(支持cookie折叠).
这就是响应在firebug上看起来的样子:
两个饼干由未知字符联合.正如我所注意到的那样 - 像Apache这样的其他服务器Set-Cookie通过新行字符在一个标题中分割多个cookie .
我注意到这只发生在HTTPS连接上.
另外,我在Github上开设了一个问题在这里.
尝试在Tomcat 9 Web服务器上运行相同的Web应用程序 - Set-Cookie标题cookie由新行字符分隔,它的工作方式与预期相符...

相同的响应,但在Glassfish5上,再次 - cookie由未知字符加入,并且不被Firefox接受(只是第一个):

在NetBeans IDE 8.2 HTTP Server Monitor中我可以看到,发送了2个cookie - 看起来没问题:

再次使用FireFox - 一个Set-Cookie标头中的2个Cookie:

Firefox Developer Edition上也是如此:

完全糊涂..
Glassfish 5使用Grizzly Framework 2.4.0 - 我认为可以在grizzly-http-servlet-2.4.0-sources.jar中找到源代码 - 但找不到将cookie连接在一起的代码段.
我现在可以确认它只与HTTP/2.0协议有关,通过启用/禁用network.http.spdy.enabled.http2在Firefox上测试about:config.在HTTP/1.1上通过HTTPS cookie按预期设置.
您不再需要那个自定义的nucleus-grizzly-all.jar。该问题已作为最新 Glassfish 5.0 nightlies 和最新升级版本的一部分发布。
当我跟踪 Grizzly 问题的实际修复并使用 GlassFish 问题集成 Grizzly 时,出现了两个不同的问题。
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |