Добавить заголовок в запрос AJAX с помощью jQuery

266

Я хотел бы добавить пользовательский заголовок в запрос AJAX POST из jQuery.

Я пробовал это:

$.ajax({
    type: 'POST',
    url: url,
    headers: {
        "My-First-Header":"first value",
        "My-Second-Header":"second value"
    }
    //OR
    //beforeSend: function(xhr) { 
    //  xhr.setRequestHeader("My-First-Header", "first value"); 
    //  xhr.setRequestHeader("My-Second-Header", "second value"); 
    //}
}).done(function(data) { 
    alert(data);
});

Когда я отправляю этот запрос, и я смотрю с помощью FireBug, я вижу этот заголовок:

ОПЦИИ xxxx/yyyy HTTP/1.1
    Хост: 127.0.0.1:6666
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv: 11.0) Gecko/20100101 Firefox/11.0
    Accept: text/html, application/xhtml + xml, application/xml; q = 0.9,/; q = 0.8
    Accept-Language: fr, fr-fr; q = 0.8, en-us; q = 0.5, en; q = 0.3
    Accept-Encoding: gzip, deflate
    Соединение: keep-alive
    Происхождение: null
    Access-Control-Request-Method: POST
     Access-Control-Request-Headers: my-first-header, my-second-header
    Pragma: no-cache
    Cache-Control: no-cache

Почему мои пользовательские заголовки переходят на Access-Control-Request-Headers:

Access-Control-Request-Headers: my-first-header, my-second-header

Я ожидал такие значения заголовка, как это:

My-First-Header: первое значение
   My-Second-Header: второе значение

Возможно ли это?

Теги:
http-headers
post

5 ответов

89
Лучший ответ

То, что вы видели в Firefox, не было фактическим запросом; обратите внимание, что HTTP-метод - OPTIONS, а не POST. Фактически это был "предполетный" запрос, который браузер делает, чтобы определить, должен ли разрешаться запрос на междоменный AJAX:

http://www.w3.org/TR/cors/

Заголовок заголовка Access-Control-Request-Headers в предполетном запросе включает список заголовков в фактическом запросе. Затем ожидается, что сервер сообщит, поддерживаются ли эти заголовки в этом контексте или нет, прежде чем браузер представит фактический запрос.

298

Вот пример того, как установить заголовок запроса в JQuery Ajax Call:

$.ajax({
  type: "POST",
  beforeSend: function(request) {
    request.setRequestHeader("Authority", authorizationToken);
  },
  url: "entities",
  data: "json=" + escape(JSON.stringify(createRequestObject)),
  processData: false,
  success: function(msg) {
    $("#results").append("The result =" + StringifyPretty(msg));
  }
});
  • 10
    спасибо, я знаю отправить запрос Ajax с пользовательским заголовком. Моя проблема с другим доменом. Все мои пользовательские заголовки помещены в Access-Control-Request-Headers. это просто безопасность в браузере: междоменный.
  • 0
    да, в браузере междоменные запросы могут вызвать некоторые трудности. вы всегда можете использовать прокси-скрипт для отправки междоменных запросов
Показать ещё 4 комментария
77

Этот код ниже работает для меня. Я всегда использую только отдельные скобки, и он отлично работает. Я предлагаю вам использовать только отдельные скобки или только двойные скобки, но не перепутаны.

$.ajax({
    url: 'YourRestEndPoint',
    headers: {
        'Authorization':'Basic xxxxxxxxxxxxx',
        'X_CSRF_TOKEN':'xxxxxxxxxxxxxxxxxxxx',
        'Content-Type':'application/json'
    },
    method: 'POST',
    dataType: 'json',
    data: YourData,
    success: function(data){
      console.log('succes: '+data);
    }
  });

Надеюсь, это ответит на ваш вопрос...

  • 1
    спасибо, я знаю отправить запрос Ajax с пользовательским заголовком. Моя проблема с другим доменом. Все мои пользовательские заголовки помещены в Access-Control-Request-Headers. это просто безопасность в браузере: междоменный.
  • 0
    Спасибо, я случайно установил заголовки: «Авторизация: Basic XXXXXX», а iOS 9 / Safari 9 выдавал SyntaxError DOM 12 для проекта.
Показать ещё 3 комментария
0

и поэтому вы не можете создать бота с javascript, потому что ваши параметры ограничены тем, что позволяет браузер. вы не можете просто заказать браузер, который следует за политикой CORS, за которой следуют все известные браузеры, - отправлять случайные запросы на другое происхождение и позволять вам получить ответ просто!

и если вы попытаетесь отредактировать некоторые заголовки запросов вручную, например origin header, из инструментов разработчиков, которые поставляются с браузерами, браузер откажется от вашего редактирования и может отправить запрос предпросмотра OPTIONS

-8

Попробуйте использовать rack-cors gem. И добавьте поле заголовка в ваш вызов ajax.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню