2018-03-12
特に、Access-Control-Allow-Origin に「null」という文字列を設定する(してはいけない)ことについて。
CORS (Cross-Origin Resource Sharing) については以下にそこそこ長い一通りの解説がある。
オリジン間リソース共有 (CORS) - HTTP | MDN
CORS は W3C の Cross-Origin Resource Sharing に規定されているが、先ほどの MDN では、その仕様書を置き換える新しい定義 (Fetch Standard → CORS protocol) があるともある。
これに関するブラウザの動作を、以下の例で説明する。
Access-Control-Allow-Origin: に指定できるのは、 W3C の Access-Control-Allow-Origin の規定 にもあるように、「*」か、Origin (1個だけ) か、「null」という文字列の、どれか一つである。
それぞれの場合について、以下で述べていく。
Access-Control-Allow-Origin: *
どのドメインからのアクセスでも許可する。
Access-Control-Allow-Origin: http://example.com
上の例では http://example.com からのアクセスのみ許可する。
Access-Control-Allow-Origin: null
この場合、file:/// からのアクセス(のみ?)を許可すると述べるページがある。
W3C の規定 に、文字列「null」が指定できるとはあるのだが、それが file:/// と解釈されると書いてある箇所あるいは公式な情報源は分からなかった。
ということまで来た所で、Access-Control-Allow-Origin に null を指定してはいけないと書いてあるページ、ならびに W3C の文書を見つけた。
「null」を指定すると、Access-Control-Allow-Origin
による制限をくぐり抜けてアクセスされ得るのだという。
というわけでサーバ側は「null」を指定してはいけない。