`err|u http2_protocol|error`when管道字符(|)in get request query parameter in wildfly 21

oxosxuxt  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(305)

我们最近将一个spring rest应用程序从wildfly15.0.1.final迁移到wildfly21.0.0.final,这显然引入了 GET 请求:每当我们有 | 的查询参数字符串中的(管道)字符 GET 请求,请求不返回响应,我们得到 ERR_HTTP2_PROTOCOL_ERROR .
我知道根据http的rfc1738规范,“|”(管道)字符是不安全的,而rfc3986允许对unicode字符进行编码。
我希望这继续工作,虽然,因为我们有外部客户发送请求与 | 字符,当前如果我们移动到当前的wildfly21配置,这些请求将失败。
同样的配置在wildfly15.0.1.final上运行良好。
我有这些在里面 standalone.xml 无济于事:

<system-properties>
      <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
      <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
 </system-properties>
<http-listener name="default" socket-binding="http" allow-unescaped-characters-in-url="true" redirect-socket="https" enable-http2="true" url-charset="UTF-8" />
<https-listener name="https" socket-binding="https" max-post-size="1048576000" allow-unescaped-characters-in-url="true" ssl-context="LocalhostSslContext" enable-http2="true" url-charset="UTF-8" />

…还有这个 standalone.conf.bat :

set "JAVA_OPTS=%JAVA_OPTS% -Dorg.apache.catalina.connector.URI_ENCODING=UTF-8"

在同一个vm上使用(迁移的)config的代码在wildfly15.0.1.final上运行良好,但是抛出 ERR_HTTP2_PROTOCOL_ERROR 在wildfly 21.0.0.决赛中,只要我有 | 在请求中。在这些情况下,看起来请求甚至没有命中我的断点。
我可以通过编程方式通过url编码所有 | 在我们的 $.ajaxSetup ,但这只修复来自服务器本身的请求,而不修复来自外部的请求 | 在他们的 GET 请求查询参数。
脏(和不足)修复:

$.ajaxSetup({
    beforeSend: function (jqXHR, settings) {
      settings.url = settings.url.replace(/\|\|/g, "%7C%7C");
    }
  });

有人遇到过这个问题吗?
完全 standalone.xml (隐藏敏感信息)这里。
编辑:在此期间,我注意到这个问题只发生在我触及windows中定义的端点时 hosts 文件。当我检查我们公司的负载均衡器时,它工作得很好。
例如。http://localhost.myproduct.com is 无法从服务器1工作,如果 127.0.0.1 localhost.myproduct.comhosts 文件,但是https://server1.myproduct.com that 如果端点是通过负载平衡器路由的,那么在同一台服务器上运行就可以了。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题