我们最近将一个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.com
在 hosts
文件,但是https://server1.myproduct.com that 如果端点是通过负载平衡器路由的,那么在同一台服务器上运行就可以了。
暂无答案!
目前还没有任何答案,快来回答吧!