0

1つのパラメータを含む次のURLで呼び出すWebアプリケーションがあります。IE11がパラメータを使用してURLを変換するのはなぜですか?

http://127.0.0.1:8888/?0001=„V‡& 

IE11でURLを入力すると、次のように変換されます。

http://127.0.0.1:8888/$/?0001=%EF%BF%BD%EF%BF%BDV%EF%BF%BD 

これは、元の形式のパラメータをアプリケーションに渡すChromeとOperaで動作します。どのように私はIE11のパラメータを変換することを停止することができます任意のアイデア?

私はIE11、Delphi 10.1 BerlinとIntraweb 14.0.53を使用しています。クエリ文字列のエンコード

よろしく、ピーター

答えて

1

非ASCII文字がRFC 3986ごとに、URLに非エンコードを表示するには許可されていません(RFC 3987経由IRIはそれを許可しますが、HTTPアイリスを使用しません)。特定のASCII文字も区切り文字として予約されており、文字データに使用されているときはエンコードされていないようにしてはいけません。

IEは正しいことをしています。 URLを送信する前に、制限された文字をバイト単位で文字エンコードする必要があります(IEはUTF-8を使用しているため、URLで使用する文字セットを指定する方法はありません)。

ウェブサーバは、元の文字を取得するためにこのプロセスを逆にすることが期待されています - %HHシーケンスをバイトに変換し、そのバイトを文字セットにデコードします。ブラウザとWebサーバーは、使用されている文字セットに同意する必要があります。通常はUTF-8が使用されますが、必ずしもそうではありません。一部の外国のサーバーでは代わりに独自のロケールを使用することがあります。

これはURLとHTTP仕様の一部です。すべてのWebサーバーは、パーセントでエンコードされたシーケンスを認識してデコードする必要があります。

ChromeとOperaは、UIが更新されていない場合でも、IEが実行しているネットワークレイヤで同じことを行う必要があります。 WirksharkまたはFiddlerのようなパケットスニファを使用して、各ブラウザが実際にWebサーバに送信しているものを正確に検証することができます。

+0

ありがとうございます。私たちはIISをチェックします。ただし、スタンドアロンのIntrawebアプリケーションでは、Webサーバーとして動作しているので、パーセントエンコードされたシーケンスをデコードしないでください。 –

+0

はい、それはURLをデコードする必要があります –

関連する問題