Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

1. シナリオ表示

Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか?

java.lang.IllegalArgumentException: リクエストターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています。
    org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:283) で
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017) で
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) で
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) で
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) で
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) で
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) で
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) で
    java.lang.Thread.run(Thread.java:745) で

ページを開くことができません

2. 原因分析

これは、リクエスト ヘッダーに RFC 7230 および RFC 3986 仕様で定義されている不正な文字が含まれていることを意味し、これによりページで 400 例外が報告されます。

理由は、Tomcat のバージョンが高すぎるためです。インターネットでは、Tomcat バージョン 7.0.73 以降では、http ヘッダー (リクエスト ヘッダー) の検証が追加されると言われています。

リクエストの取得、つまり疑問符を渡すパラメータは、リクエストヘッダーのみがあり、リクエスト本体がないことを意味します。

RFC3986 ドキュメントでは、URL には英語の文字 (a-zA-Z)、数字 (0-9)、-_.~4 の特殊文字、およびすべての予約文字のみを含めることができると規定されています。

RFC3986 では、次の文字を予約文字として指定しています: ! * ' ( ) ; : @ & = + $ , / ? # [ ]

同時に、RFC 3986 仕様は Tomcat 7.0.73 バージョンですでに提案されており、RFC 7230 も前者の補足または改良であるため、この問題は Tomcat 7.0.73 以降で発生します。

注: この状況は IE ブラウザでのみ発生します。IE ブラウザは中国語のパラメータをエンコードしませんが、他の種類のブラウザはデフォルトで自動的に中国語をエンコードします。

3. 解決策

方法 1: Tomcat のバージョンを下げる。

テストの結果、インターネット上の Tomcat の最大バージョン要件の説明が間違っていることが判明しました。7.0.73 より低いバージョンである必要はありません。

tomcat7.0.70 をダウンロードしました。プロジェクトを実行した後も、文字セット エラーが残っており、Web ページを開くことができませんでした。

しかし、tomcat7.0.61 をテストしたところ、プロジェクトは完全に正常に実行されました。コンソールにエラーが報告されなくなり、Web ページを正常に開くことができました。

64 ビットのダウンロード アドレス: https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.61/bin/apache-tomcat-7.0.61-windows-x64.zip

32 ビットのダウンロード アドレス: https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.61/bin/apache-tomcat-7.0.61-windows-x86.zip

方法 2: GET リクエストを POST リクエストに変更する (推奨)

方法3: リクエストの取得(疑問符パラメータの受け渡し)

URIEncoder()関数を使用して中国語の文字をエンコードする

以上がTomcat例外解決方法(リクエスト対象に無効な文字が見つかりました。有効な文字はRFC 7230とRFC 3986で定義されています)の詳細な内容です。Tomcat例外解決方法の詳細については、123WORDPRESS.COMの他の関連記事に注目してください!

以下もご興味があるかもしれません:
  • Tomcat の一般的な例外と解決コードの例
  • SpringBoot プロジェクトがパッケージ化され、外部の Tomcat に公開されます (さまざまな例外を解決)
  • セマフォによるTomcatの異常終了の解決方法
  • Tomcat での jar のロードに関する異常な問題の分析と解決
  • tomcat6 の jsp でこの応答に対して getOutputStream() が既に呼び出されている例外の原因と解決策
  • tomcat の起動時にエラーが発生しました: プロキシが例外をスローしました: java.rmi.server.ExportException: ポートは既に使用されています: 1099 解決策
  • idea2020.2 が pom.xml ファイル Maven プラグイン tomcat7 でエラーに遭遇する問題を解決する
  • IDEA 構成の Tomcat 起動エラーの問題を解決する
  • SSM プロジェクトを Idea にインポートした後、Tomcat を起動するとエラー 404 が発生する問題を解決します。
  • Tomcat 起動エラー: java.util.zip.ZipException の解決方法

<<:  MySQL データベースのバックアップ プロセスに関する注意事項

>>:  js を使用して USB スキャナー データを取得する方法

推薦する

Django+mysql の設定と簡単な操作データベースのサンプルコード

ステップ1: MySQLドライバをダウンロードするcmdは作成されたDjangoプロジェクトディレク...

Docker は次の「Linux」になれるか?

Linux オペレーティング システムは過去 20 年間にわたってデータ センターに革命をもたらし...

Nginx ログ出力のリクエスト後パラメータを設定する方法

【序文】当プロジェクトの SMS 機能は、第三者に接続することです。第三者からの元の受信確認要求は ...

MySQLでANDとORを組み合わせる問題を解決する

以下のように表示されます。 SELECT prod_name,prod_price FROM pro...

nginxプロセスロックの実装の詳細な説明

目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...

MySQL ビューの原理と基本操作例

この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...

MySQL パラメータ関連の概念とクエリ変更方法

序文:以前の記事では、特定のパラメータの機能についてよく紹介してきました。しかし、MySQL パラメ...

Apache FlinkCEP でタイムアウトステータス監視を実装するための詳細な手順

CEP - 複合イベント処理。ご注文後、一定期間内にお支払いの確認が取れませんでした。タクシーの配...

MySQL 8.0.25 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.25の最新のダウンロードとインストールのチュートリアルは参考になります。具体的な...

MySQL のあまり知られていないソート方法

序文ORDER BY 字段名升序/降序、このソートステートメントは皆さんご存知だと思いますが、特殊な...

Linux に JDK1.8 をインストールするための詳細なチュートリアル

1. 設置前の清掃 rpm -qa | grep jdk rpm -qa | grep gcj yu...

ウェブサイトデザインにおいて非常に重要な概念であるdiv+floatの分析

ウェブサイトの構築では、HTML と CSS に関するさまざまな問題に常に遭遇します。ウェブサイト ...

Docker MQTT のインストールと使用のチュートリアル

MQTT の紹介MQTT (Message Queuing Telemetry Transport)...

シンプルな時計を実装するJavaScript

この記事では、JavaScriptでシンプルな時計を実装するための具体的なコードを参考までに紹介しま...