クロスドメイン通信では、デフォルトでユーザー定義ヘッダーを参照できない
curlなどでサーバーサイドがHeaderを返すことが確認できていても、ブラウザのCORS仕様で参照できない、ということが起きる。
ブラウザでヘッダーの参照を許可するには、サーバーサイドのレスポンスヘッダに Access-Control-Expose-Headers
を付加する。
例えばgolangのgin frameworkをでは以下のようにする。
// ブラウザがレスポンスヘッダーの読み取りを許可
c.Header("Access-Control-Expose-Headers", "X-HogeApp-Hogeid")
以下も合わせて設定するとgood
// 合わせてこちらも
c.Header("Access-Control-Allow-Origin", "http://hogehoge")
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
c.Header("Access-Control-Max-Age", "86400")
// ブラウザからリクエストヘッダーの送信を許可
c.Header("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, X-HogeApp-Hogeid")
middlewareにして
終わり
サーバーサイド視点だと「ヘッダー返してますけど」と、意外と気付かずにハマってしまう!
ブラウザ仕様も理解しておこう。
TODO
他にもCookieを使うときにハマったことや、Access-Control-Allow-Origin
を複数許可したい時の小技を覚えたので後で書く…かも。(Cookieを使うときはAccess-Control-Allow-Origin
を*
にしてはいけないなど)
…全部ここに書いてあった!
http://inside.pixiv.net/entry/2014/12/16/181804