3

Apache Tomcat では、パラメーターURIEncodingは Tomcat に着信 URI の解釈方法を指示します。

URIエンコーディング

これは、%xx が URL をデコードした後に、URI バイトをデコードするために使用される文字エンコーディングを指定します。指定しない場合、ISO-8859-1 が使用されます。

Apache Tomcat 7 - HTTP コネクタ

ただし、例で説明されているように、Unicode 文字を URL エンコードする適切な方法は何ですか? URI 内の非 ASCII 文字は、現在の標準 (RFC 3986 および 3987) に従って、常に UTF-8 でエンコードされます。

そう:

  • 標準で義務付けられている設定があるのはなぜですか?
  • デフォルトが標準の義務と異なるのはなぜですか? (UTF-8 の代わりに ISO-8859-1)

これは単に、Tomcat の設定が標準よりも前のものであり、下位互換性のために保持されているためですか? または、UTF-8 とは異なる値が意味をなす状況はありますか?

4

2 に答える 2

4

URIEncodingTomcat 8 - Apache Tomcat 8 - The HTTP Connectorのパラメータの説明:

これは、%xx が URL をデコードした後に、URI バイトをデコードするために使用される文字エンコーディングを指定します。指定しない場合、org.apache.catalina.STRICT_SERVLET_COMPLIANCE システム プロパティが true に設定されていない限り、UTF-8 が使用されます。この場合、ISO-8859-1 が使用されます。

したがって、説明は Apache Tomcat 7 の説明から変更されました。 のデフォルト値はorg.apache.catalina.STRICT_SERVLET_COMPLIANCEApache Tomcat 8 から false です。したがって、UTF-8 は Apache Tomcat 8 の URIEncoding のデフォルト値です。つまり、Tomcat は標準 (および一般的な使用法) に従うようになりました。 )。


Tomcat 7 まで、Tomcat がデフォルトの URI エンコーディングとして ISO 8859-1 を使用した理由については、次のとおりです。

これは、Tomcat の開発者が、これがサーブレット仕様で要求されるものであると信じていたためのようです (設定の名前が STRICT_SERVLET_COMPLIANCE を示しているように)。

実際のところ、サーブレットの仕様では、どのバージョンでも URI エンコーディングについて明示的に言及していません。ただし、Content-TypeHTTP ヘッダーでエンコーディングが指定されていない場合は、POST データを ISO 8859-1 として解析する必要があることに言及していますcharset(サーブレット仕様 V2.5、「リクエスト データ エンコーディング」)。どうやらこれは、クエリ パラメータ (および URI 全体) もデフォルトで ISO 8859-1 としてデコードする必要があることを意味すると解釈されたようです。

根本的な問題は、サーブレット仕様が URI のデコードに使用するデフォルトのエンコーディングを指定していないこと、さらにはこのエンコーディングを変更する方法を指定していないことです。これはおそらく、URI 仕様がもともと URI で非 ASCII 文字を許可していなかったためです。これは、IRI を導入することによってのみ標準化されました。2005年 1 月のRFC 3987を参照してください。したがって、すべてのサーブレット コンテナは、独自のデフォルト値とURIEncodingApache Tomcatなどの設定パラメータ。

これら 2 つの問題は、サーブレット仕様に対するバグとして報告されています。

いつかサーブレットの仕様が変わるかも…。少なくとも SERVLET_SPEC-146 は解決済みとしてマークされています。

于 2016-03-16T12:02:43.890 に答える
0

少なくとも Tomcat 6 以下では、URIEncoding は重要であるだけでなく必要であり、明示的に「UTF-8」に設定しないと多くの人が問題を抱えていることがわかりました。あなたの質問に関しては、下位互換性のためだとしか思えません。開発者は、一度コードを書いたらそれを削除することを嫌います。たとえそれが再び必要になる可能性がゼロであっても:)

于 2016-03-16T11:29:26.053 に答える