1

次のような URL があります: product//excerpts?feature=picture+modes

ブラウザからこの URL にアクセスすると、バックエンドは「product//excerpts?feature=picture+modes」としてリクエストを受け取ります。

Web サーバー側では、セパレータとして + を使用しています。したがって、feature=picture+modes は、画像とモードの 2 つの機能があることを意味します。

URLに移動してそのコンテンツを取得するスクリプト(Java)を作成および自動化しました。このスクリプトを実行すると、バックエンドはリクエストを次のように受け取ります: "product/B000NK6J6Q/excerpts/feature=picture%2Bmodes"

これは、スクリプト (Java) 内で + を %2B に変換する URLEncoder.encode を使用し、このエンコードされた URL をサーバーに送信するためです。

Java が提供する urlEncoder とブラウザ (FF/IE) に存在するものとが異なるのはなぜですか。どうすればそれらを同じにできますか? それらをデコードするにはどうすればよいですか?(URLDecoder.decode の '+' はスペースを与えます) また、慣例 (および仕様?) に従って区切り文字として '+' を使用していますか?

実践

4

1 に答える 1

4

あなたが見ているものは実際には正しいです。ウィキペディアのパーセント エンコーディングを参照してください。この+文字は予約文字であるため、 としてエンコードする必要があります%2Bapplication/x-www-form-urlencodedさらに、歴史的にブラウザは、スペースが+の代わりになるMIME タイプで送信されるフォームに対して、異なる形式のパーセント エンコーディングを使用します%20

URL でa を使用する場合+、セパレータはバックエンドでスペースにする必要があります。+バックエンドで使用する場合%2Bは、URL に含まれます。

于 2009-12-22T13:22:06.840 に答える