Могу ли я установить заголовки в междоменных запросах 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.