Basic認証でブラウザがID・パスワードを自動的に送信する範囲
RFC2617の2 Basic Authentication Schemeによれば
A client SHOULD assume that all paths at or deeper than the depth of the last symbolic element in the path field of the Request-URI also are within the protection space specified by the Basic realm value of the current challenge. A client MAY preemptively send the corresponding Authorization header with requests for resources in that space without receipt of another challenge from the server.
IE9での動作は
/sample/login で認証に成功すると、 /sample/*** すべてに、Authorization: ヘッダを付ける模様。 /hogehoge にはつけない。
※ Tracの認証はこの性質を利用しているわけではなさそう。
logoutクリック時にはCookieをクリアするのみで、その後も
ブラウザはAuthorizationを送り続ける
このため、再度loginをクリックしても、ダイアログが出ることなく、
ログイン済みになる。
Cookieを送信する範囲
まず、Cookieの仕様書として何を参照すべきか、については、Netscapeの仕様書か、RFC6265 ということになるらしい。
RFC6265 8.5. Weak Confidentiality によれば、
- ポート番号を区別しない。→ foo.bar.net:80で得たCookieはfoo.bar.net:8080にも送信される。
- Schemeを区別しない。http://foo.bar.netで得たCookieはhttps://foo.bar.netにも送信される。
ホストAから得たCookieをホストBに送るかどうかについては、
Cookieのdomain=の値Dで決まり、
- BがDと同じか
- BがDの配下(サブ)の場合
にBに送信される。
domain=の指定がなければ、取得元のホスト名(A)がDの代わりに使われる。
問題は「配下(サブ)」かどうかの判定がブラウザにより異なる点。
- domainの値: foo.net
- ホスト foo.net →送信される
- ホスト sub.foo.net → 送信される(IE)/送信されない(Firefoxなど)
RFC6265の仕様は上記のIEの動作と一致している(と読める)。
※ 以前のRFCでは、Firefoxの動作と一致していたような記憶がある。
IEの動作については以下に説明がある。