framesetタグとHTTP Basic認証の関係について

[新着] Webテンプレートを仮オープンしました



0   名前: 匿名希望 : 2006/07/15(土) 01:04  ID:p3jYrH7b
■やりたいこと
以下のようなディレクトリ構成で,dir1とdir2の認証ファイルを分けたいと考えております.
(Server version: Apache/2.0.52):

docroot
|
|
---dir1
|index.html (<- up.html と down.htmlをそれぞれframeで呼ぶ frameset を使用)
|up.html
|down.html
|
--- dir2
|index.html

Apache の "httpd.conf" は,以下のような設定となっております.

KeepAlive On
   ;
<Directory "/docroot/dir1">
AllowOverride all
Order allow,deny
Allow from all
AuthType Basic
AuthName "dir2-->"
AuthUserFile /etc/.htpasswd_dir1
Require valid-user
</Directory>

<Directory "/docroot/dir1/dir2">
AllowOverride all
Order allow,deny
Allow from all
AuthType Basic
AuthName "dir2-->"
AuthUserFile /etc/.htpasswd_dir2
Require valid-user
</Directory>
   ;

htpasswd コマンドを用いて,".htpasswd_dir1"ファイルに"User1"を定義し,
同様に,".htpasswd_dir2"ファイルに"User2"を定義しました.

やりたいことは,
まず,"/dir1/index.html"をロードし,User1としての認証後,
"/dir1/dir2/index.html"をロードし,User2として認証をおこない,
再び,"/dir1/index.html"をロードしたときに,再度User1としての認証を問われたくない
ということです.

■現状の不具合
現状は,
"/dir1/index.html"をロードし,User1としての認証後,
"/dir1/dir2/index.html"をロードし,User2として認証をおこない---<A>---,
再び,"/dir1/index.html"をロードしたときに,再度User1としての認証を問われてしまいます.---<B>---

■参考
しかし,<A>の後,frameset を使用していない"/dir1/up.index"をロードすると,
認証は問われません.

■聞きたいこと
なぜ,<B>で,再び認証を問われてしまうのでしょうか?
どなたか,回避策をご存知の方は,いらっしゃらないでしょうか?

お力を貸していただければと希望しております.

1   名前: 匿名希望 : 2006/07/15(土) 01:04  ID:BTmwUDED
自己フォローです。
たいへん申し訳ないのですが、原因が分かりました。

>■現状の不具合
>現状は,
>"/dir1/index.html"をロードし,User1としての認証後,
>"/dir1/dir2/index.html"をロードし,User2として認証をおこない---<A>---,
>再び,"/dir1/index.html"をロードしたときに,再度User1としての認証を問われてしまいます.---<B>---

と書いておりましたが、
実際にブラウザに入力した文字列は、
1回目→"http://hostname/dir1"
2回目→"http://hostname/dir1/dir2"
3回目→"http://hostname/dir1"
でした。

これを、
1回目→"http://hostname/dir1/"
2回目→"http://hostname/dir1/dir2/"
3回目→"http://hostname/dir1/"
と入力すると、
<B>での再認証が問われませんでした。

以下は、プロトコルに興味のある方のみ、ご覧ください。

詳しい知人とともに、プロトコルを解析したところ、
2回目→"http://hostname/dir1/dir2"
と入力したときに、ブラウザとしては、dir1配下のdir2ファイルを
GETしようと思って、
User1としての認証情報でGETしにいくのですが、
サーバー側としては、dir1/dir2は、ディレクトリだから、
401エラーを返し、
ブラウザ側は改めて、認証をユーザに問い、
User2として、認証をするので、
dir1配下のファイルは、User2として認証をおこなえばいいと
ブラウザは思ってしまうようです。
その結果、
3回目→"http://hostname/dir1"
と入力すると、
User2として、dir1ディレクトリをGETしようとするので、
サーバ側は401エラーを返却し、
再度、認証を問われる結果となった模様です。
# かなり端折って、書いております。

アドレスを入力するときに、最後のスラッシュをつければ、
ブラウザもディレクトリと判断し、
ディレクトリに対応する認証ユーザを覚えてくれる様で、
<B>のような現象は発生しないのだと思われます。

お騒がせいたしました。

2   名前: Pid : 2006/07/15(土) 01:04  ID:PC1xIR5b
ディレクトリ指定のときは必ず / を付けろと口すっぱく言われたことを思い出しました。まさかこんな部分でも影響があるとは……。

勉強になりました。ありがとうございます。

一覧へ戻る