ブラウザ

Last-modified: 2013-10-20 (日) 15:32:42

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 によれば、

ホスト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の動作については以下に説明がある。