XHRによるCORS通信時のpreflight問題について考える【.htaccessは要らないよ】
概要
JavascriptのXHRやfetchを使って非同期に通信を行う際、自分のドメインを超えて他のドメインにアクセスしたいことはよくありますよね。XHR/fetchはいずれも他ドメインへの通信も可能(正確にはXHRは(通称)XHRLevel2以降)ですが、サーバ側でドメインが異なるアクセス元からの通信を許可してやる必要があります。これがCORS(Cross-OriginResourceSharing)と呼ばれる決まり・技術です。先日、ちょっと調べる機会がありましたのでその際に確認したことを備忘録を兼ねて共有したいと思います。CORSを扱う際には.htaccessなどでヘッダを追加する方法が取られますが、サーバサイドプログラムで出力すれば良かった(私自身もそうであるべきだと思っていた)のでそのあたりも含めてまとめます。また、Javascript側からヘッダを追加する(Authorizationヘッダなどが多い)場合などに必要になるpreflightリクエストについても言及します。