- ベストアンサー
Basic認証でキャンセルすると再度認証画面が表示される現象について
- 初めてbasic認証を行っているのですが、キャンセルボタンを押すと再度認証画面が表示されます。
- エラー画面は表示されるものの、キャンセルボタンを何度か押すと画像が表示されなくなりCSSも崩れます。
- 問題なく認証されるため、何か間違っている箇所があるのか疑問です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> 認証時に何も入力せずにキャンセルボタンを押すと、 > 何もしなくてもすぐにまた認証画面が出て、 > キャンセルを何度も押さないと認証画面が消えません。 これはブラウザ側の問題だ。BASIC認証がかかったリソースにアクセスすると、Webサーバはまず401を返す。このステータスコードを受け取ったブラウザはBASIC認証ダイアログを表示するが、そこでキャンセルするとブラウザはBASIC認証用のデータをHTTPリクエストヘッダに含めずにもう一度Webサーバにアクセスする。もちろん認証できないので再びWebサーバは401を返す。ブラウザはまたBASIC認証ダイアログを表示する。大体3回くらい試行するようだ。BASIC認証ダイアログに正しい情報を入力するとWebサーバからは200が返ってきてめでたしめでたしなわけだ。これを制御する方法はたぶん無いと思う。 で、何度もBASIC認証を失敗すると401用のドキュメントが返ってくるのだが、その時に画像やCSSが見つからないのは別の理由による。たとえば以下のような構成になっているとしよう。 /index.html ←http://www.example.com/index.htmlにマップされる /css/default.css ←http://www.example.com/css/default.cssにマップされる /img/button.jpg ←http://www.example.com/img/button.jpgにマップされる /basic/index.html ←http://www.example.com/basic/index.htmlにマップされる /error/401.html ←これはURLではなくWebサーバが401の時に返すリソースのパス ここで、http://www.example.com/basic/index.htmlにアクセスすると、BASIC認証がかかるとする。そして何度か失敗させるとWebサーバは/error/401.htmlを読み込んでブラウザに返す。この時に、cssやimgが相対パスになっていると位置がずれるんだ。401.htmlが以下のようだったとすると、 <html> <head> <link rel="stylesheet" type="text/css" href="css/default.css" /> <title>401</title> </head> <body> 401エラーでござんす。トップに戻る→<a href="http://www.example.com/"><img src="img/button.jpg"></a> </body> </html> http://www.example.com/basic/index.htmlにアクセスして401で上の内容が返ってきた時、ブラウザはhttp://www.example.com/basic/css/default.cssとhttp://www.example.com/basic/img/button.jpgを探しにいく。当然そこには無いのでCSSも画像も読み込めなくなる。なので、エラー時に返却するリソースとそいつが使うリソースは絶対パスの関係でないといけないのです。
お礼
ありがとうございます。 web制作初心者なもので、anmochiさんのおっしゃることを私なりに解釈すると、 401に記述するCSSとimgのパスを絶対パスに変更すると、レイアウトの崩れはなくなるということでしょうか。 また、参考にさせていただいた設置方法のサイトのサンプルでは、 何度もbasic認証画面が出るということはなかったので、 何か別の原因も考えられそうですね。 もう少しあがいてみます。 とりあえず、絶対パスに変更してみます。 ありがとうございました。