トップ回答者
GET パラメータの違いによって Web ページが開けない場合がある

質問
-
Web ページのリダイレクトがうまく行かない場合があり、それがどのような法則でうまく行かないのか知りたいと思っています。
具体例を以下に示します。
次のようなファイルを web サーバに配置し IE11 からアクセスしました。
```foo.htm
<meta http-equiv="refresh" content="1;URL=empty.htm?%E3%81%84%E3%81%84=1&foo=1&foo=1">
``````bar.htm
<meta http-equiv="refresh" content="1;URL=empty.htm?%E3%81%84=1&foo=1&foo=1">
``````baz.htm
<meta http-equiv="refresh" content="1;URL=empty.htm?%E3%81%84%E3%81%84=1&foo=1">
``````empty.htm
empty
```foo.htm にアクセスするとブラウザの下部に「ooo.jp は応答していません。 [Web ページの回復(R)]」と表示されました。
また、[F12] の [ネットワーク] から [キャプチャ] をすると [結果] の欄には「(保留中…)」と表示されたまま数分待っても変化が無いままとなりました。
Webサーバ (Apache) のログを確認したところ empty.htm に対する GET リクエストのステータスコードは 200となっており、サーバ側は正しく応答しているように思われます。
続いて bar.htm と baz.htm にアクセスすると empty.htm にリダイレクトされました。
IE11 以外のバージョンでも確認を行いました。
IE10 と Edge は IE質問11 と同様で、
IE8 と IE9 はすべてリダイレクトされました。Firefox からも同様にアクセスするとすべてのファイルで empty.htm にリダイレクトされました。
上記の内容をまとめると次の通りです。IE11 foo.htm > 保留中 , bar.htm > リダイレクト , baz.htm > リダイレクト
IE10 foo.htm > 保留中 , bar.htm > リダイレクト , baz.htm > リダイレクト
IE9 foo.htm > リダイレクト , bar.htm > リダイレクト , baz.htm > リダイレクト
IE8 foo.htm > リダイレクト , bar.htm > リダイレクト , baz.htm > リダイレクト
Firefox foo.htm > リダイレクト , bar.htm > リダイレクト , baz.htm > リダイレクト質問1 : foo.htm と bar.htm の間で動作が違うのはなぜでしょうか?
質問2 : foo.htm と baz.htm の間で動作が違うのはなぜでしょうか?
# 確認に使用した環境
- WinXP , IE 8.0.6001.18702
- Win7 Pro , IE 9.0.8112.16421
- Win7 Pro , IE 10.0.9200.17414
- Win7 Pro , IE 11.0.9600.18349
- Win7 Pro , Firefox 37.0.2
- Win10 Edge# 補足事項
Microsoft コミュニティ に上記の質問を(投稿したところ)[http://answers.microsoft.com/ja-jp/IE/forum/IE11-windows_7/web/002f92e8-ee48-443d-a74a-884a1b66e9d5]
フォーラムモデレータの方に MSDN フォーラムで投稿しなおすように薦められたためこちらで質問させて頂きました。
回答が得られ次第、Microsoft コミュニティに投稿した方にフィードバックしたいと思っています。- 編集済み Yamagami.H 2016年6月20日 1:33 確認に使用した環境 の修正
回答
-
だいぶ遅くなりましたが Edge チームから回答がありました。
バグだと認める回答でしたが、セキュリティ関係のバグではないため修正しないとの回答でした。
残念な回答でしたが納得のいく結果になったのは良かったです。
今回の質問に丁寧に付き合って頂けた SurferOnWww さん、的確なコメントを頂いた hebikuzure さん、本当に有難うございました。
- 回答の候補に設定 SurferOnWww 2016年8月6日 13:52
- 回答としてマーク Hebikuzure aka Murachi AkiraMVP, Moderator 2016年8月7日 7:37
すべての返信
-
ググって調べただけですが、以下の記事の話のようなことではないでしょうか? IE のオプション設定を調べてみてください。
IE9 で Meta タグ の Refresh で Redirect できない
https://social.technet.microsoft.com/Forums/lync/ja-JP/30940d27-9a79-46d1-8fe7-4a48e503f39d/ie9-meta-refresh-redirect-?forum=internetexplorerja【追伸】
すみません、上の話とは違いますね。それだと全てがうまく行かないようですから。もう少し調べて見ますが、上の記事に書いてあるような別の手段(JavaScript を使うとか)を取るという選択肢はないでしょうか?
- 編集済み SurferOnWww 2016年6月15日 3:56 【追伸】追記
-
ご返信ありがとうございます。
なるほど IE のオプション設定ですか...
参考にしたいとは思いますが、追伸で書かれていらっしゃるように直接は関係しているか怪しい感じがしますね。> 別の手段(JavaScript を使うとか)を取るという選択肢はないでしょうか?
今回、質問を投稿したのは問題を回避する手段が知りたくて、というよりも原因が知りたいためです。
といいますのも、現在運用中のシステムで今回の事象が見つかり、その原因調査や影響の絞り込みをしたいと思っているためです。
回避する手段としては仰るように javascript を使うとか、bar.htm や baz.htm の書き方にするとか get ではなく post を使うといった所を考えています。引き続きご返信お待ちしていますので何か分かればご教授くださいませ。
-
自分の環境では問題を再現することができませんし、ググって調べても同様な事例は見つからないということで、お手上げ状態です。
お役に立てずすみませんが、他の回答者の方の回答をお待ちください。
その間に、もう少し切り分けを進めておいてはいかがでしょう。たとえば、(1) Web サーバーからの応答は正しく戻ってきているか。
> Webサーバ (Apache) のログを確認したところ empty.htm に対する GET リクエストのステータスコードは 200と
> なっており、サーバ側は正しく応答しているように思われます。とのことですが、クライアントの PC まで応答が戻ってきているでしょうか? F12 開発者ツールでなく Fiddler をクライアント PC にインストールして使うと確認できると思います。
Fiddler はプロキシなので、Fiddler でキャプチャ結果を見て以下のようになっていれば応答はクライアント PC までは戻ってきていて、その後の処置に問題があるということが確認できるはずです。
(2) ブラウザのアドレスバーに直接問題の URL を入力して要求をかけるとどうなるか。
それでうまく行く場合は meta http-equiv="refresh" でリフレッシュするという操作と関係して問題が出ているという話になると思います。
・・・ただ、それが分かったからと言って、マイクロソフトに聞かないと分からない IE 内部の動作の問題だとすると、解決につながらないかもしれませんが。
あと、以下の案内にありますように、業務上のクリティカルなトラブルであれば、マイクロソフトのサポートを利用することも検討された方がいいかもしれません。
フォーラムでご質問頂くにあたっての注意点
https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68もう一つ、余計なお世話かもしれませんが、リダイレクトには JavaScript ではなくて 301リダイレクトを使うのがよさそうです。Apache とのことですので、以下の記事の (1) の方法が使えるのではないでしょうか。
リダイレクト手法まとめ
http://likealunatic.jp/2007/10/21_redirect(1) 301リダイレクトと呼ばれる方法で、.httaccessを使うなどして行うもの。
(2) HTMLの<meta http-equiv="Refresh" ...>を使う方法
(3) JavaScriptのlocation.href、またはlocation.replace()を使う方法- 編集済み SurferOnWww 2016年6月15日 6:05 脱字追加
-
再びお返事ありがとうございます。大変参考になりました。
> 自分の環境では問題を再現することができませんし...
IE のバージョンで切り分けが出来ていると思っていたのですが、そうではなかったのですね...
IE のオプションが案外関係しているのかもしれませんね。
> (1) Web サーバーからの応答は正しく戻ってきているか。
Web サーバからの応答をきちんと確認するにはネットワークを流れるパケットを直接見るくらいしかないのだろうか、と尻込みしていたのですが、Fiddler という便利なツールがあるのですね。教えていただいたようにして確認したいと思います(結果は改めて書きたいと思います)。
> (2) ブラウザのアドレスバーに直接問題の URL を入力して要求をかけるとどうなるか。
これは事前に確認していたにも係わらず重要ではないと思い込んで、そのまま失念してしまっていました。
ブラウザのアドレスバーに直接問題の URL を入力した場合でも「保留中」なります。
つまり、リダイレクトは関係なく、GET パラメータの違いによって Web ページが開けない場合がある、ということになります(失礼しました)。質問文のタイトルが適切ではなくなってくるため修正したいと思います。
Web ページのリダイレクトがうまく行かない場合がある
⇒GET パラメータの違いによって Web ページが開けない場合がある
> フォーラムでご質問頂くにあたっての注意点
こういった情報は見落としがちになるため大変参考になります。
> リダイレクト手法まとめ
こちらのリンクもありがとうございます。
対処方法については...状況をみてベストな方法を採りたいと思います。 -
> IE のバージョンで切り分けが出来ていると思っていたのですが、そうではなかったのですね...
> IE のオプションが案外関係しているのかもしれませんね。すみません、誤解を招く書き方でした。
×:自分の環境では問題を再現することができませんし、
○:自分は今問題を再現できる環境を持っていませんし、
(もっと具体的に言うと、自分が今ここで使えるのは Vista SP2 32-bit のノートパソコンだけなんです)
ブラウザのアドレスバーに直接問題の URL を入力しても再現できるということですね。もし、問題が IE11 と ?%E3%81%84%E3%81%84=1&foo=1&foo=1 というクエリ文字列のみに起因するものであれば、質問者さんのサーバーを使わなくても、誰でもアクセスできるサイト、例えば、https://msdn.microsoft.com/ja-jp/library/default.aspx
に問題のクエリ文字列 ?%E3%81%84%E3%81%84=1&foo=1&foo=1 を追加して IE11 でアクセスすれば再現できるかもしれません。(できなくても、それはそれで情報としては有用だと思います)
それを試して、質問者さんの方で再現できれば、ここや Answers の方でも参加者の皆さんに試してもらって何か有益な情報が得られるかもしれません。
-
またまたありがとうございます。ほんとうに助かります。
> ブラウザのアドレスバーに直接問題の URL を入力しても再現できるということですね。もし、問題が IE11 と ?%E3%81%84%E3%81%84=1&foo=1&foo=1 というクエリ文字列のみに起因するものであれば、質問者さんのサーバーを使わなくても、誰でもアクセスできるサイト、例えば、
ナイスアイデアですね!
実際やってみると誰でもアクセス出来るサイトでも問題の事象が発生しました。
このことから考えると Web サーバ側の問題ではなく IE の問題といったところでしょうか...# 問題の事象が発生する様子を gif に撮りました。
# 私の Microsoft アカウントではここに画像の貼り付けが出来ないため URL を貼ります。# https://goo.gl/photos/M6KqLbHrRtUYEm5b8- 編集済み Yamagami.H 2016年6月15日 13:20
-
だいぶ遅くなりましたが Fiddler で試した結果を書きます。
結果としては Web サーバからクライアント PC まで応答は返ってきているようです。
以下に詳細を記します。* * *
1. Fidder を起動
2. インターネットオプション から 閲覧の履歴の削除 を実行
(キャッシュファイルが残っていると Fiddler に表示されない場合がありそうなので)- インターネット一時ファイルおよび Web サイトのファイル
- クッキー と Web サイト データ
- 履歴
- ダウンロードの履歴3. アドレスバーに次の URL を入力
http://example.com/index.html?%E3%81%84%E3%81%84=1&foo=1&foo=1
4. 問題の事象発生
この時、Fiddler の左側のペインの Result の列には 200 と表示されるため Web サーバに対するリクエストが正しく返ってきていると思われます。
しかし、右側のペインの表示は SurferOnWww さんの画像とはちょっと異なります。
Inspectors タブの中の QueryString の表は空欄で何も表示されない状態となっています。ただしこれは、正しく表示できるはずのクエリストリングの場合 (例えば http://example.com/index.html?foo=1 のような URL にアクセスする場合) であっても空欄のままなので、ツールとかPCの環境側の問題で空欄になっているような気がします...また、右下のペインの Response Headers の表示も異なりますがヘッダーが返ってきたということは正しく応答があったものと思ってあまり気にしていません。
いちおうその内容を以下に貼っておきます。HTTP/1.1 200 OK
Content-Encoding: gzip
Cache-Control: max-age=604800
Content-Type: text/html
Date: Mon, 20 Jun 2016 01:13:11 GMT
Etag: "359670651+gzip"
Expires: Mon, 27 Jun 2016 01:13:11 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (pae/37AE)
Vary: Accept-Encoding
X-Cache: HIT
x-ec-custom-error: 1
Content-Length: 606- 編集済み Yamagami.H 2016年6月20日 1:27 タイポ修正
-
ここまでの話の流れから IE に何か問題がある可能性が高いのではないかと思い、EdgeHTML issue tracker にポストしました。
There is a web page can not be opened by the Query String (Get Parameter) https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7936051/
現在、Edge 開発チームからは問題が再現しないため、より詳細に調査したほうがいいという返答が返ってきています。
IE/Edge のバージョンによって問題の事象が起きる/起きないを切り分けできているつもりでいたのですが(複数の端末/複数のネットワークで試して再現したためです)、どうやらそうではないようです。
そこで、このスレッドを見ている方でお時間のある方は次の URL を開いて問題の事象が起きるかどうか教えていただきたいと思っています。http://example.com/index.html?%E3%81%84%E3%81%84=1&foo=1&foo=1
お力添えよろしくお願いします。
-
だいぶ遅くなりましたが Edge チームから回答がありました。
バグだと認める回答でしたが、セキュリティ関係のバグではないため修正しないとの回答でした。
残念な回答でしたが納得のいく結果になったのは良かったです。
今回の質問に丁寧に付き合って頂けた SurferOnWww さん、的確なコメントを頂いた hebikuzure さん、本当に有難うございました。
- 回答の候補に設定 SurferOnWww 2016年8月6日 13:52
- 回答としてマーク Hebikuzure aka Murachi AkiraMVP, Moderator 2016年8月7日 7:37