Access-Control-Allow-Origin の値を動的に設定する必要があるパターン

複数のオリジンからクロスドメインのリクエストを受けるサーバが Access-Control-Allow-Origin を返す場合、オリジンごとに異なる値を動的に返す必要がある。

  • 参考: Nginxの場合のこんな感じの設定を書く
  • gist.github.com

    その場合、CDNが問題になる

    途中にCDNが挟まってる場合、 Access-Control-Allow-Origin が、最初に来たオリジンのままで固定されてしまう。

    これにより、 Access-Control-Allow-Origin の値と異なるオリジンからのリクエストがすべて、CORSエラーになってしまう。

    レスポンスヘッダに Vary 'Origin' を追加する。

    Vary とは?

    キャッシュ時にURL以外に、キーとなるリクエストヘッダの値を決める設定。 例えば Vary : Accept-Language とすると、同じURLでも、言語ごとにキャッシュされるようになる。

    んで、 Vary 'Origin' の場合、 Origin がキーになる。 Origin は、クロスドメインのリクエストを投げた場合に、元々のドメインが格納されるリクエストヘッダ。

    そうすれば、複数オリジンからのリクエストごとに、異なる Access-Control-Allow-Origin を返すレスポンスをそれぞれキャッシュできる。