Подтвердить что ты не робот

Кросс-домен AJAX не отправляет заголовок X-Requested-With

Создайте веб-службу на http://www.a.com/service.asmx и отправьте запрос ajax для междоменного доступа от http://www.b. ком. Проверьте заголовки в Firebug или в Live HTTP Headers или любом другом плагине, который вы хотите.

В заголовках запроса нет трассировки поля заголовка X-запрошенного заголовка HTTP.

Однако, если вы отправляете запрос ajax той же службе из того же домена (например, http://www.a.com/about), вы увидите это поле заголовка.

Почему поле заголовков X-Запрошено-С опущено для запросов ajax для междоменного домена?

Обновление: Я знаю, что вызовы JSONP не являются вызовами AJAX в природе. Таким образом, вы не увидите заголовок X-Requested-With в вызовах JSONP.

4b9b3361

Ответ 1

Если вы используете jQuery для выполнения вашего запроса ajax, он не отправит заголовок X-Requested-With (HTTP_X_REQUESTED_WITH) = XMLHttpRequest, потому что это кросс-домен. Но есть два способа исправить это и отправить заголовок:

Вариант 1) Вручную установите заголовок в вызове ajax:

$.ajax({
     url: "http://your-url...",
 headers: {'X-Requested-With': 'XMLHttpRequest'}
});  

Вариант 2) Скажите jQuery, чтобы не использовать значения по умолчанию для перекрестных доменов, поэтому он будет хранить заголовок X-Requested-With в запросе ajax:

$.ajax({
  url: "http://your-url...",
 crossDomain: false
});

Но при этом сервер должен разрешать эти заголовки, тогда сервер должен печатать эти заголовки:

print "Access-Control-Allow-Origin: *\n";
print "Access-Control-Allow-Headers: X-Requested-With, Content-Type\n";

В первой строке выше будет исключена ошибка "Происхождение не разрешено Access-Control-Allow-Origin".
Во второй строке будет исключена ошибка. "Поле заголовка запроса X-Requested-With не разрешено в Access-Control-Allow-Headers".