これまでTomcatを使用したことはありませんが、最近、JSPプロジェクトを継承したため、実行する必要があります。 EclipseにTomcat8.0をローカルにインストールできましたが、すべて正常に動作します。また、UbuntuVPSにTomcat8.0をインストールしました。 URLの処理方法に関する小さな問題を除いて、アプリは問題なく実行されています。
クライアント側アプリケーションは、次のように、パラメーターにエスケープされていない角括弧と中括弧を含むURLを生成します。
GET /saveItems.json?items=[{%22json%22:%22here%22}]
クライアント側のアプリを変更したいのですが、変更できません。このバックエンドを実行する必要があります。
アプリケーションの私のローカルコピーはこれをうまく処理します。ただし、サーバーでは、次のエラーが発生します。
Java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.Apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.Java:286)
at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1009)
at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:672)
at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1504)
at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1460)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
at Java.lang.Thread.run(Thread.Java:748)
運が悪ければ、これに影響を与える可能性のある設定を探していました。ここで何が欠けていますか?
$ CATALINA_HOME\conf\server.xmlを編集してこれを実行可能にします
古い値:<Connector ... protocol="HTTP/1.1"... />
新しい値:<Connector ... protocol="HTTP/1.1"... relaxedQueryChars='[]|{}^\`"<>' />
Tomcat 8.0.39/8.5.9/7.0.73
HTTPリクエスト行の解析に有効な文字のチェックを追加します。 この要件 によると、version 8.0.42/8.5.12/7.0.76
いくつかの無効な文字を許可するように変更を加えます。{
、}
および|
は、システムプロパティの値に文字が存在する場合に許可されますTomcat.util.http.parser.HttpParser.requestTargetAllow
。
システムプロパティを追加できますTomcat.util.http.parser.HttpParser.requestTargetAllow={}
このエラーを防止します。解決策の1つは、編集$CATALINA_HOME\conf\catalina.properties
。
特別な文字でGET URL
しようとすると、このエラーが発生します。
Java.lang.IllegalArgumentException:リクエストターゲットで無効な文字が見つかりました。
server.xml
のコネクタパラメータを変更することで、Tomcatバージョン9の特殊文字を解析できます。
Connector port="80" protocol="HTTP/1.1" relaxedQueryChars="\ { } |"
同様の問題が発生していましたが、Springブートも使用して、次の解決策で問題が解決しました。
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setProperty("relaxedQueryChars", "|{}[]");
}
});
return factory;
}
クレジット Matthias-lohr - https://stackoverflow.com/questions/46251131/invalid-character-found-in-the-request-target-in-spring-boot =