Ответ 1
Ваша проблема заключается не в jquery, а в как работает CORS. Обратный вызов beforeSend, вероятно, работал так, как ожидалось... но браузеры не будут отправлять пользовательские заголовки в предполетные запросы, несмотря ни на что. Это по дизайну; целью предпродажного запроса является определение того, какую информацию пользовательскому агенту (браузеру) разрешено отправлять за пределы "простого" материала, определенного в спецификации CORS. Таким образом, для того, чтобы пользователь мог отправлять любые непростые данные (например, ваш пользовательский заголовок), поскольку часть запроса предполетности является самоотверженной.
Чтобы проинструктировать useragent включить ваш пользовательский заголовок в настоящий запрос CORS, включите Access-Control-Allow-Headers
header в свой предполетный ответ. Стоит отметить, что если вы не слишком беспокоитесь о том, какие заголовки передают useragent, я считаю, что вы можете просто откликнуть значение поля заголовка запроса Access-Control-Request-Headers
в качестве значения Access-Control-Allow-Headers
, которое вы отправляете в ответ.
Вы также можете включить некоторые другие заголовки Access-Control-Allow-*
, определенные в разделе синтаксиса спецификации.
См. также CORS - Как выполнить предпросмотр http-запроса?
См. также пример предпросмотра Mozilla CORS, который показывает эти заголовки в действии.