Edited at

CORSでユーザー定義のResponse Headerを参照する

More than 3 years have passed since last update.


クロスドメイン通信では、デフォルトでユーザー定義ヘッダーを参照できない

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


参考にしました

Qiita - CORSまとめ