2009年 06月 23日

Cross Site XHR

Firefox3.5 の場合 Basic Auth が該当領域にかかっているとき CSXHR しようとするとめんどうくさい。

JS 側

  • xhr.setRequestHeader("Authorization", "Basic foobar"); してやる
  • (Basic Auth ダイアログは XHR ではでないし勝手に送ったりはしない)

鯖側

  • setRequestHeader されていると simple request にならず必ず OPTIONS method でアクセスがくる
  • OPTIONS には Basic Auth かからないようにする (Authorization を送らない)
  • OPTIONS で以下のヘッダを返してやる
    • Access-Control-Allow-Origin: domain
    • Access-Control-Allow-Methods: POST, GET, OPTIONS
    • Access-Control-Allow-Headers: Authorization

事故死しないように setRequestHeader はちゃんと管理する必要あり (クライアントサイドコードなので……)

req.withCredentials = "true"

して

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: domain

をかえせばいいらしい…… けど domain はちゃんと Origin と一致してないとだめっぽい?