Могу ли я установить заголовки в междоменных запросах json?

Я провел некоторые исследования в Интернете, но мне не удалось получить полную картину по этому вопросу. Может ли кто-нибудь помочь решить этот ответ сейчас и навсегда?

Это то, что я нашел до сих пор:

  • Можно сделать междоменный вызов с jsonp. Изменение заголовков в вызове jsonp никогда не допускается
  • Можно сделать междоменный вызов с JSON, если сервер позволяет это.

Вот что я пытаюсь сделать:

$.ajax({
    type: "GET",
    crossDomain: true,
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", "Bearer " + ($("#accesstoken").val()));
    },
    contentType: "application/json; charset=utf-8",
    url: myJSonServer + encodeURI(operation),
    dataType: 'json',
    cache: false,
    success: callback,
    error: function (jqXhr, textStatus, errorThrown) { alert(textStatus + ": " + errorThrown); }
});

Вот что происходит:

  • Когда myJSonServer находится в одном домене, проблем нет вообще
  • Когда myJSonServer находится в другом домене, запрос отправляется, но без заголовка Bearer

Этот заголовок Bearer является частью стандарта oAuth2.

Мне известно о том, что, возможно, это не лучшее решение, устанавливающее accessToken в браузере. И я знаю, что мог бы использовать прокси для этой ситуации.

Мне просто любопытно, можно ли установить заголовки для междоменного запроса json?
Спасибо

-- Задача решена

Я использовал MVC4 и добавил crossDomainScriptAccessEnabled="true" в web.config. Я думал, что этого будет достаточно, но ответ апсиллеров решил мою проблему. Теперь я добавил это в мой web.config:

 <system.webServer>
     <httpProtocol>
         <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Authorization" />
         </customHeaders>
      </httpProtocol>
   </system.webServer>

3 ответа

Решение

С JSONP установка пользовательских заголовков невозможна.

С CORS сервер должен отправить Access-Control-Allow-Headers заголовок, чтобы разрешить необычные заголовки запроса от клиента. Со страницы HTML5 Rocks CORS:

Access-Control-Allow-Headers... - Список поддерживаемых заголовков запросов, разделенных запятыми.

Таким образом, ваш сервер должен отправить Access-Control-Allow-Headers: Authorization сообщить браузеру, что отправка разрешена Authorization на сервер с запросом. Без этого заголовка сервера браузер будет отправлять только несколько общих заголовков с запросом и игнорировать остальные.

Поскольку "jsonp" работает путем создания тега сценария и использования атрибута src= загрузить ресурс из другого домена. Поэтому я не думаю, что есть способ изменить заголовки запроса.

Если вы используете JSONP для отправки запросов из разных источников - тогда ответ отрицательный, вы не можете устанавливать заголовки HTTP для таких запросов. Если вы используете CORS для выполнения запросов из разных источников - тогда ответ - да, поскольку вы используете простой XHR для выполнения запроса: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing.

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