Ответ 1
W3C имеет эту спецификацию о заголовках, разрешенных setRequestHeader
Завершите эти шаги, если заголовок является нечувствительным к регистру совпадением для одного из следующие заголовки:
- Accept-Charset
- Accept-Encoding
- Access-Control-Request-Headers
- Access-Control-Request-Method
- Соединение
- Content-Length
- Cookie
- Cookie2
- Content-Transfer-Encoding
- Дата
- Ожидать
- Хост
- Keep-Alive
- Происхождение
- Referer
- TE
- Прицеп
- Передача-кодирование
- Обновление
- User-Agent
- С помощью
... или если начало заголовка является нечувствительным к регистру совпадением для Proxy- или Sec- (в том числе, когда заголовок просто Proxy- или Sec -).
Указанные выше заголовки управляются пользовательским агентом, чтобы он контролировал эти аспекты транспорта. Это гарантирует целостность данных для некоторых степени. Имена заголовков, начинающиеся с Sec, не могут быть установлены в разрешить чеканить новые заголовки, гарантированные не XMLHttpRequest.
Также вы можете подумать:
Если заголовок не находится в author-request-headers, добавьте заголовок с его ассоциированным значением в список и завершите эти шаги.
О реализации браузеров я нашел этот хороший тест: https://dvcs.w3.org/hg/webapps/diff/5814514eeba4/tests/XMLHttpRequest/setrequestheader-header-forbidden.htm, который вы не можете использовать для поиска текущих различий.
Например, IE имеет это определение безопасности в заголовках:
IE: см. RFC2616, раздел 14: Определения полей заголовка для общего списка стандартных заголовков, Сервер в конечном счете несет ответственность за соблюдение заголовков запроса. На сегодняшний день наиболее распространенным заголовком запроса является Content-Type, который требуется некоторым веб-службам XML.