むかーしから、HTTPSのログイン処理直後にHTTPのページにリダイレクトさせようとするとIE6で何か言われる的な話がありました。
- httpsからhttpにresponse.redirectをするときに、セキュリティ警告の表示を非表示にするためにはどうしたらできますか?
- https⇒httpリダイレクト時の警告メッセージ - QA@IT
IE9とかいってる今日この頃ですが、そう簡単にIE6の呪いから逃げるわけにいきませんので、頑張って対応してる人もたくさんいるでしょう。
上リンク先でも話に出ている、Y!のログイン直後の挙動を注意深く覗いてどーやっているかをまとめておきます。
HTTPSからHTTPSへのリダイレクト
例:Y!のトップページ(http://www.yahoo.co.jp/)のどこかにある「ログイン履歴を確認」リンクをたどり、ログイン直後にHTTPSのページにいく。
HTTP/1.1 302 Found
Location: https://lh.login.yahoo.co.jp/?.done=http://www.yahoo.co.jp/
普通ですね。
HTTPSからHTTPへのリダイレクト
例:Y!のトップページ(http://www.yahoo.co.jp/)からログインして戻ってくる。
このとき、HTTP Headerを見ると、
HTTP/1.1 200 OK
↑ 302ではない
ってなってます。上と違う実装になっているわけです。
このときのHTMLを見ると、こんなんなってるみたいです。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script language="JavaScript"> <!-- window.location.replace("http://www.yahoo.co.jp/"); // --> </script> <meta http-equiv="Refresh" content="0; url=http://www.yahoo.co.jp/"> </head> <body> <a href="http://www.yahoo.co.jp/">http://www.yahoo.co.jp/</a>へジャンプしようとしています。 自動的にページが切り替わらない場合には、<a href="http://www.yahoo.co.jp/">こちら</a>をクリックしてください。</body> </html>
- meta refreshですっとばす
- JavaScriptも書いてある
- JavaScript Offの人もいるのでAタグ+文言も書いてある
なるほど。
試してみる
同じように実装してみました。
sample : https://r-weblife.sakura.ne.jp/php-quietredirection/test.php
gist : http://gist.github.com/586865
動かして試してみましょう。
あ、IE6入ってない。