Как отправить собственный заголовок в междоменном (CORS) XMLHttpRequest?

Я пытаюсь отправить запрос CORS для полезной нагрузки JSON. Я контролирую как сервер, так и клиент.

Здесь я следую: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control

На сервере есть собственный заголовок, который необходимо отправлять вместе с каждым запросом. Таким образом, этот пользовательский заголовок делает запрос "не простым", и поэтому запрос должен быть предварительно обработан запросом OPTIONS.

Я вижу, как jquery делает запрос OPTIONS, но он не отправляет пользовательский заголовок.

Методы, которые я пробовал:

В обоих случаях браузер не отправляет пользовательский заголовок.

Я использую FF 17.0.1, jquery 1.8.3.

1 ответ

Решение

Ваша проблема не в jquery, а в том, как работает CORS. Ваш обратный вызов beforeSend, вероятно, работал должным образом... но браузеры не будут отправлять пользовательские заголовки в предварительных запросах, несмотря ни на что. Это по замыслу; цель предварительного запроса состоит в том, чтобы определить, какую информацию пользователь-агент (браузер) разрешено отправлять, помимо "простых" вещей, определенных в спецификации CORS. Таким образом, для userragent отправка любых непростых данных (таких как ваш пользовательский заголовок) в качестве части запроса предварительной проверки является самоубийством.

Чтобы поручить userragent включить ваш пользовательский заголовок в текущий запрос CORS, включите Access-Control-Allow-Headers заголовок в вашем предполетном ответе. Стоит отметить, что если вы не слишком озабочены тем, какие заголовки передает useragent, я считаю, что вы можете просто отразить значение Access-Control-Request-Headers поле заголовка запроса в качестве значения Access-Control-Allow-Headers Вы отправляете в ответ.

Вы также можете включить некоторые другие Access-Control-Allow-* заголовки, определенные в разделе синтаксиса спецификации.

См. Также CORS - Как выполнить предварительную проверку httprequest?

См. Также пример предварительной проверки CORS в Mozilla, который показывает эти заголовки в действии.

Другие вопросы по тегам