Java 在Glassfish-5中设置Cookie头:在一个头中折叠多个Cookie在Firefox上不起作用(https+;HTTP/2.0)
我注意到Glassfish-5Web服务器只发送一个Java 在Glassfish-5中设置Cookie头:在一个头中折叠多个Cookie在Firefox上不起作用(https+;HTTP/2.0),java,http,servlets,cookies,glassfish-5,Java,Http,Servlets,Cookies,Glassfish 5,我注意到Glassfish-5Web服务器只发送一个Set Cookie头的响应,其中包含几个Cookie。当我用萤火虫观察时,我可以看到它们被未知字符分隔开。无论如何,Firefox只读取第一个cookie。如何配置Glassfish5发送多个集Cookie头-每个Cookie一个?声明: 概述源服务器不应将多个集合Cookie标头字段折叠为单个标头字段。通常的机制 折叠HTTP头字段(如[RFC2616]中的定义)可能会 更改Set Cookie标头字段的语义,因为 %设置Cookie使用x
Set Cookie
头的响应,其中包含几个Cookie。当我用萤火虫观察时,我可以看到它们被未知字符分隔开。无论如何,Firefox只读取第一个cookie。如何配置Glassfish5发送多个集Cookie头-每个Cookie一个?声明:
源服务器不应将多个集合Cookie标头字段折叠为单个标头字段。通常的机制 折叠HTTP头字段(如[RFC2616]中的定义)可能会 更改Set Cookie标头字段的语义,因为 %设置Cookie使用x2C(“,”)字符的方式存在冲突 有这样的折叠。
Set Cookie
header中的新行字符
我注意到这只发生在HTTPS连接上。
另外,我在Github上打开了一个问题
尝试在Tomcat 9 web服务器上运行相同的web应用程序-设置Cookie
标题Cookie由新行字符分隔,工作正常。。。
同样的响应,但在Glassfish5上,再次-Cookie由未知字符连接,Firefox不接受(仅第一个):
在NetBeans IDE 8.2 HTTP服务器监视器中,我可以看到,发送了2个cookie-看起来正常:
再次在FireFox上,在一组Cookie标题中使用-2 Cookie:
仅收到一个-且值不正确…:
Firefox开发者版上也一样:完全困惑 Glassfish 5使用Grizzly Framework 2.4.0(我认为在中有可用的源代码),但找不到将cookie连接在一行中的代码段 我现在可以确认它只与HTTP/2.0协议相关,在firefox上通过启用/禁用
network.HTTP.spdy.enabled.http2about:config
进行测试。在HTTP/1.1上,通过HTTPS设置cookies,正如预期的那样。在我们删除的一系列评论中,我指出奇怪的响应都是http2,并给出了禁用服务器端cookies的指示,作为一种解决方法。现在,为了给其他建设性的评论(或回答)腾出空间,我们删除了旧的评论(或回答),我在下面将它们作为一个单独的回答重新命名
Grizzly的http2过滤器似乎有问题(让我们先假设一下)。您的Firefox屏幕截图显示的是HTTP/2.0
。NetBeans服务器监视器很可能工作正常,因为它不支持http2,所以在这种情况下,您的服务器会退回到HTTP/1.1
。(编辑:这只是一个假设,最近的一条评论暗示它可能支持http2…)
Grizzly从2.4.0开始支持HTTP2,但您必须。。。还有玻璃鱼
如何配置Glassfish5发送多个集Cookie头-每个Cookie一个
当Glassfish/Grizzly团队继续工作时,您可以在Glassfish中禁用http2作为一种解决方法
假设您的HTTPS侦听器是http-listener-2
,您可以从命令行执行此操作:
asadmin set server.network-config.protocols.protocol.http-listener-2.http.http2-enabled=false
据我所知,这个设置还没有文档化,我从中推断出了上面的命令(并在代码中一直执行到)。此外,该属性似乎未在管理控制台中公开,因此我认为除了如上所述使用asadmin set
(请注意,“Version”属性是一种设置)之外,没有其他方法
我的研究基于“最新的升级版本”(当时的b19,“最新的夜间版本”是b20)。到GitHub的链接指向b19。这个问题现在由专业的glassfish团队解决了-我们应该将nucleus grizzly all.jar文件更改为新的文件-可在GitHub获得。再次感谢glassfish开发团队 您不再需要定制的nucleus-grizzly-all.jar。本期已作为最新Glassfish 5.0夜间版和最新升级版的一部分发布
有两个不同的问题,因为我跟踪了一个Grizzly问题的实际修复,并使用GlassFish问题来集成Grizzly。你能告诉我字符代码吗?该死,我刚刚意识到你在使用Firebug。。。使用HTTP/2。。。引用getfirebug.com:Firebug扩展不再被开发或维护。我们邀请您改用Firefox开发工具。好的,还有萤火虫,下一个,但是。。。你还在Firefox开发工具的网络标签上看到这个奇怪的角色吗?您如何观察到只有第一个cookie有效?是的,Firefox Developer Ed上也是如此。我可以通过工具->选项->删除单个cookie来检查收到的cookie。还注意到NetBeans IDE 8.2 HTTP服务器监视器显示请求协议HTTP/2.0,这意味着它支持HTTP/2.0?我可以确认
asadmin设置server.network-config.protocols.protocol.HTTP-listener-2.http、 http2已启用=false
正在工作,所以这是一个临时解决方案。啊,太酷了。所以我认为问题是,讨厌的字符是空字符(\u0000
),而修复提交是(尽管注释引用了grizzly中的另一个bug)