Java `ERR_HTTP2_PROTOCOL_ERROR`when管道字符(|)位于Wildfly 21中的GET请求查询参数中
我们最近将Spring REST应用程序从Wildfly 15.0.1.Final迁移到Wildfly 21.0.0.Final,这显然给Java `ERR_HTTP2_PROTOCOL_ERROR`when管道字符(|)位于Wildfly 21中的GET请求查询参数中,java,spring,rest,encoding,wildfly,Java,Spring,Rest,Encoding,Wildfly,我们最近将Spring REST应用程序从Wildfly 15.0.1.Final迁移到Wildfly 21.0.0.Final,这显然给GET请求带来了一个问题:只要GET请求的查询参数字符串中有(管道)字符,请求没有返回响应,我们得到ERR\u HTTP2\u PROTOCOL\u ERROR 我知道根据HTTP的RFC1738规范,“|”(管道)字符是不安全的,而RFC3986允许对Unicode字符进行编码 但是我希望它继续工作,因为我们有外部客户端发送查询参数中带有|字符的请求,并且当
GET
请求带来了一个问题:只要GET
请求的查询参数字符串中有
(管道)字符,请求没有返回响应,我们得到ERR\u HTTP2\u PROTOCOL\u ERROR
我知道根据HTTP的RFC1738规范,“|”(管道)字符是不安全的,而RFC3986允许对Unicode字符进行编码
但是我希望它继续工作,因为我们有外部客户端发送查询参数中带有|
字符的请求,并且当前如果我们移动到当前的Wildfly 21配置,这些请求将失败
相同的配置在Wildfly 15.0.1.Final上运行良好
我在standalone.xml
中有这些,但没有用:
…这在standalone.conf.bat
中:
set "JAVA_OPTS=%JAVA_OPTS% -Dorg.apache.catalina.connector.URI_ENCODING=UTF-8"
在同一个虚拟机上使用(迁移)配置的同一代码在Wildfly 15.0.1上运行良好。Final但在Wildfly 21.0.0中抛出ERR\u HTTP2\u PROTOCOL\u ERROR
。只要请求中有
,Final。在这些情况下,看起来请求甚至没有达到我的断点
我可以通过对$.ajaxSetup
中的所有
进行URL编码,以编程方式进行脏修复,但这只修复来自服务器本身的请求,而不修复在其GET
请求查询参数中带有
的外部请求
脏(和不足)修复:
$.ajaxSetup({
发送前:函数(jqXHR,设置){
settings.url=settings.url.replace(/\\\\\\\\\\\/g,“%7C%7C”);
}
});
有人遇到过这个问题吗
完整的standalone.xml
(屏蔽敏感信息)
编辑:在此期间,我注意到只有当我点击Windowshosts
文件中定义的端点时,才会发生此问题。当我检查我们公司的负载平衡器时,它工作正常
因此,例如,如果127.0.0.1 localhost.myproduct.com
位于hosts
文件中,则服务器1不起作用,但如果端点通过负载平衡器路由,则访问同一服务器的操作正常