いくつかのフィールドがあるフォームがあります。フォームを送信すると、サーバーはリダイレクト(HTTP 302)で応答します。
フォームが送信されたときに<input type=file>
フィールドがある場合、IEはリダイレクトに従わず、代わりに「InternetExplorerはWebページを表示できません」というエラーを返します。
no<input type=file>
フィールドがある場合、期待どおりにリダイレクトに従います。
HTTP 302応答は、どちらの場合も正確に同じであり、応答のタイムスタンプのみが異なります。
私はIE8とIE9でこれを経験しています。 (私はより低いバージョンを試していません)。 Firefox、Chrome、Opera、Safariはすべて期待どおりにリダイレクトに従います。
ノート:
enctype="multipart/form-data"
です。部分的なURLまたは完全なURL(ホスト、プロトコルなどを含む)へのリダイレクトですか? PHPで、完全な http://server.dom/path/to/file が含まれていない302を使用したリダイレクトの例をたくさん見てきました。 IEによって無視されるか、マングルされます。Railsでは、これがルーターのfoo_pathとfoo_urlの違いになる可能性があります。
質問は3歳ですが、最近自分でこの問題に遭遇し、どこにも正しい答えが見つかりませんでした。ここで承認済みとしてマークされた回答は、実際には何も回答しません。
私にとって違いをもたらしたのは、302応答に次のヘッダーを追加したことです。
Connection: close
完全なURLを使用して別のサイトにリダイレクトしていましたが、IEは、同じTCPストリームを介して後続のリクエストを再送信せずに送信することにより、接続を最適化しようとしています。それを開きますが、ヘッダーに明示的な「接続」命令がないとサイトが異なることを理解するほど賢くはありません。
これは少なくともIE10とIE11で発生し、他のどのブラウザーにもこの問題はありません。
同じ問題を抱えている人のためにこれに追加するだけです:
IEは、ヘッダーコマンドの形成方法について非常に厳格なようです。私のアプリケーションは以下に苦労していました:
header("location:http://www.test.co.uk/test/test.php");
または
header("location:test.php");
しかし、コマンドが次のように修正されたときに動作を開始しました。
header("Location: http://www.test.co.uk/test/test.php");
この問題を経験している人々のための別のヒント:
私の場合、IE11の特定のインストールが適切にリダイレクトされていませんでしたが、他のインストールは正しくリダイレクトされていました(IEの同じバージョンでも)。それが機能しないときに起こったことは、IEがリダイレクトページの終わりと次のページの始まりを検出しないことです。
これは、リダイレクトページの終わりのHTMLコードの一部としてブラウザに表示され、その後に、ロードする必要のある実際のページのコンテンツが直接続きます。
圧縮が有効になっている場合、リダイレクトページの最後に文字化けしたテキスト(次のページの圧縮バージョン)が続きます。
圧縮を無効にすると、同じことが起こり、リダイレクトページの終わりが表示され、フォローアップページが表示されます。プレーンなHTMLであるため、IEでレンダリングされ、次のように表示されます。
したがって、明らかにIEはリダイレクトページがいつ終了するかを検出せず、次のページが始まります。
サーバー上でIIS)の下でPython/Flaskを実行していました。IEのバージョンはまったく同じで、一方のブラウザーでこの問題が発生し、もう一方のブラウザーでは問題が発生しません。すべての設定を綿密に比較しました。 、しかし、動作したブラウザで問題を再現できなかった、またはその逆。
実際のリダイレクトを実行するPythonライブラリ(Werkzeug)を更新しようとしましたが、PythonとIISを統合するコンポーネントであるwfastcgi.py、両方を更新しましたこれらの事柄の違いはありませんでした。
私がやったこと:
多くの場合、完全なURLを使用したリダイレクトが機能しました。そのため、すべてのリダイレクトが相対URLではなく絶対URLを使用していることを確認しました。
その後、IEの読み込みに問題があったため、リダイレクトが残っていました。これらのリダイレクトの最後に日付がありました(クエリ文字列内)。最後にダミーのクエリ文字列パラメーターを追加しました。 、そして問題はなくなりました。
例えば:
元のURLが/diary?targetday=2018-01-01
で終わっている場合は、それを/diary?targetday=2018-01-01&test=1
に変更して機能させます。
これが誰かを助けることを願っています。