

CORSでSimple Requestになる条件としてMDNに下記の記載があるのですが、“forbidden header
name”に記載されているヘッダ（例えば"Cookie"）はSimple Requestになるのでしょうか？

> Apart from the headers set automatically by the user agent (for example,
> Connection, User-Agent, or any of the other headers with names defined in
> the Fetch spec as a “forbidden header name”), the only headers which are
> allowed to be manually set are those which the Fetch spec defines as being a
> “CORS-safelisted request-header”, which are:

<https://developer.mozilla.org/ja/docs/Web/HTTP/CORS>


CC BY-SA 4.0
2019-07-31T04:33:43.163
57059
2019-08-01T01:29:58.020
19297
question
http cors
CORSで単純リクエストになる条件


_forbidden header name_ に記載されているヘッダは、 **ブラウザが自動的に追加するものであり、 JavaScript
から制御することは出来ません** 。そして、たとえ _forbidden header_
がヘッダに含まれていたとしても、それはシンプルリクエストになり得ます。

> ### HTTP header layer division[[1]](https://fetch.spec.whatwg.org/#http-
> header-layer-division)
>
> For the purposes of fetching, there is an API layer (HTML’s img, CSS'
> background-image), early fetch layer, service worker layer, and network &
> cache layer. `Accept` and `Accept-Language` are set in the early fetch layer
> (typically by the user agent). Most other headers controlled by the user
> agent, such as `Accept-Encoding`, `Host`, and `Referer`, are set in the
> network & cache layer. Developers can set headers either at the API layer or
> in the service worker layer (typically through a Request object). Developers
> have almost no control over forbidden headers, but can control `Accept` and
> have the means to constrain and omit `Referer` for instance.
>
> * * *
>
> ### § 2.2.2. Headers[[2]](https://fetch.spec.whatwg.org/#terminology-
> headers)
>
> These are forbidden so the user agent remains in full control over them.
> Names starting with `Sec-` are reserved to allow new headers to be minted
> that are safe from APIs using fetch that allow control over headers by
> developers, such as XMLHttpRequest. [XHR]

たとえば、 `Origin` ヘッダは _forbidden header_ ですが、 **CORS リクエストには必ず含まれる**
ものです。このことからも、「 _forbidden header_
に記載があるヘッダはシンプルリクエストのヘッダに含めてはならない」という主張が成り立たないとわかります。

> ### § 3.2.2. HTTP requests[[3]](https://fetch.spec.whatwg.org/#http-
> requests)
>
> A CORS request is an HTTP request that includes an `Origin` header. It
> cannot be reliably identified as participating in the CORS protocol as the
> `Origin` header is also included for all requests whose method is neither
> `GET` nor `HEAD`.

また、 `Cookie` ヘッダについても、一度 `Set-Cookie` ヘッダにより Cookie
が設定されていれば、シンプルリクエストの送信前にブラウザによって自動的に付与されます。

よって、シンプルリクエストとしての条件を満たしていれば、それはシンプルリクエストになります。


CC BY-SA 4.0
2019-08-01T01:29:58.020
57088
2019-08-01T01:29:58.020
2020-06-17T08:14:45.997
-1
32986
57059
answer