ブラウザによって、あるケースではOriginヘッダーが付与されなかったりして困りました。
あまりそういう人はいないのか、ググってもあまりヒットしなかったので調べた結果を残しておきます。
調査したブラウザ
- Chrome 79.0.3945.130
- Firefox 72.0.1
- Microsoft Edge 44.18362.449.0 (EdgeHTML 18.18362)
- Internet Explorer11 592.18362.0
調査したパターン
下記の組み合わせでリクエストヘッダーにOriginが設定されるか否かを調査。
- リクエストメソッドはPOSTとGETに絞った
- 接続先は同一ドメイン・別ドメインで検証
- フォーム送信、Fetch API、XMLHttpRequestの3パターンを検証
調査結果
フォーム送信
- ChromeとFirefoxはPOST時にはOriginが設定された。
- EdgeとIE11は設定されない
クロスドメイン | 同一ドメイン | ||
---|---|---|---|
POST | GET | POST | GET |
あり※ | なし | あり※ | なし |
※EdgeとIE11以外
Fetch API
- (Fetch APIに対応していないIE11を除く)すべてのブラウザはすべて同じ挙動だった
- クロスドメインへのアクセスはGETかPOSTかに関わらず、Originヘッダーが付与される
- 同一ドメインへのアクセスでもPOSTの場合はOriginヘッダーが付与される
クロスドメイン | 同一ドメイン | ||
---|---|---|---|
POST | GET | POST | GET |
あり | あり | あり | なし |
XMLHttpRequest
- クロスドメインへのアクセスはGETかPOSTかに関わらず、どのブラウザでもOriginヘッダーが付与される
- 同一ドメインへのPOSTもGETも基本的にはOriginヘッダーが付与される
- 但し、IE11はGETの場合は付与されない
クロスドメイン | 同一ドメイン | ||
---|---|---|---|
POST | GET | POST | GET |
あり | あり | あり | あり※IE11以外 |
まとめ
The user agent MAY include an Origin header field in any HTTP request.
RFC的には明確にどの場合に付与するか決まってないようです。
Edgeはバグのような記述を見ましたが、IE11の挙動が変わる気がしないので使いにくい属性だと思いました。