Учитывая эти заголовки запроса:
Host: api.example.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:41.0) Gecko/20100101 Firefox/41.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Origin: https://web.example.org
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
И эти заголовки ответов:
Connection: keep-alive
Content-Length: 0
Content-Type: text/plain; charset=utf-8
Date: Tue, 13 Oct 2015 10:57:34 GMT
Server: nginx/1.8.0
access-control-allow-headers: Authorization, Content-Type
access-control-allow-methods: PUT, DELETE, PATCH
access-control-allow-origin: *
Это работает, хотя явно разрешены только заголовки Authorization
и Content-Type
. Почему я не должен разрешать другим заголовкам, которые посылает мой браузер? (например, DNT
)
Обновить: эта страница MDN содержит обзор простых заголовков (заголовков заголовков по умолчанию CORS-safelisted):
Простой заголовок (или заголовок запроса CORS-safelisted) является одним из следующие заголовки HTTP:
- Принять
- Accept-Language
- Content-Language
- Content-Type с типом MIME его анализируемого значения (игнорируя параметры) любого приложения /x -www-form-urlencoded, multipart/form-data или text/plain.
Или один из этих заголовков подсказок клиента:
- DPR
- Downlink
- Save-данные
- ВЭкран-Ширин
- Ширина