Заголовок "Access-Control-Allow-Origin" содержит несколько значений
Я пытаюсь отправить запрос на получение API, как это URL-адрес входа
var url = "http://demo.software.travel/gptp/api/authorization?apiKey=****&alias=****&login=****&password=****"
$.get(url, function(data) {
console.log(data);
});
я получаю это в моей консоли эта ошибка
XMLHttpRequest не может загрузить http://demo.software.travel/gptp/api/authorization?apiKey=**** & alias = **** & login = **** & password = ****. Заголовок "Access-Control-Allow-Origin" содержит несколько значений " http://travellights.net/, *", но разрешено только одно. Происхождение " http://travellights.net/" поэтому не допускается.
Я пытаюсь увидеть вопросы здесь, чтобы решить их, но я не получил то, что мне нужно изменить, это на самом деле раздражает.
Заголовок "Access-Control-Allow-Origin" содержит несколько значений
это решено asp.net web.congif
Кстати, я использую CHROME BROWSER любую помощь, я ценю.
ОБНОВЛЕНИЕ заголовков ответа:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:origin, x-requested-with, Content-Type, accept, Token
Access-Control-Allow-Methods:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Access-Control-Allow-Origin:http://travellights.net
Access-Control-Allow-Origin:*
Connection:close
Content-Encoding:gzip
Content-Type:application/json;charset=utf-8
Date:Thu, 02 Jun 2016 16:41:18 GMT
Server:nginx/1.1.19
Set-Cookie:JSESSIONID=51FEE1A1206B9B481DD3EEA4167A9256; Path=/gptp
Vary:Origin
Vary:Accept-Encoding
X-UA-Compatible:IE=EmulateIE7
Заголовки запроса:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ar;q=0.6,en-GB;q=0.4
Connection:keep-alive
Host:demo.software.travel
Origin:http://travellights.net
Referer:http://travellights.net/b2b/Pages/login?
User-Agent:Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
2 ответа
Вы пытаетесь выполнить обмен ресурсами между источниками (CORS), который представляет собой механизм, позволяющий запрашивать ограниченные ресурсы на веб-странице из другого домена за пределами домена, из которого был создан ресурс. (например, доступ к файлам шрифтов или JSON).
Браузеры ограничивают ваш доступ к ресурсам из других источников в соответствии с политикой того же происхождения в качестве меры безопасности для пользователей Интернета.
Чтобы обойти эту проблему, у вас есть варианты:
- разрешить CORS в домене http://demo.software.travel/(но есть проблемы безопасности, подробное описание здесь: https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet)
Включите CORS на сервере, чтобы иметь возможность доступа к другим доменам через. это можно сделать, добавив следующие заголовки к ответам:
Access-Control-Allow-Origin: http://travellights.net
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
- если вам не предоставлен общий доступ к ресурсам с этим доменом, вы можете использовать JSONP для операций только для чтения (JSONP по своей сути только для чтения)
JSONP оборачивает объект JSON в обратный вызов, что технически делает запрос неограниченным ресурсом (тегом скрипта) и, следовательно, может использоваться несколькими доменами.
это можно сделать с помощью vanilla js, добавив на страницу тег script.
function process(data) {
// do stuff with JSON
}
var script = document.createElement('script');
script.src = '//domainURL?callback=process'
document.getElementsByTagName('head')[0].appendChild(script);
или вы можете использовать jquery для достижения того же:
$.ajax({enter code here
url: "http://query.yahooapis.com/v1/public/yql",
jsonp: "callback",
dataType: "jsonp",
data: {
q: "select title,abstract,url from search.news where query=\"cat\"",
format: "json"
},
success: function( response ) {
console.log( response ); // server response
}
});
Документация по jquery: https://learn.jquery.com/ajax/working-with-jsonp/
Если вы установите "Полный" CORS (с предварительным запросом OPTION) в nginx, добавив 'access-control-allow-origin *', и независимо добавите этот заголовок (для Simple CORS - без предварительного запроса OPTION) к каждому ответу в SERVER (например, php):
header('Access-Control-Allow-Origin', "*");
Тогда вы получите эту проблему. Решение: удалите код, который добавляет этот заголовок на сервер, если вы уже добавили этот заголовок в конфигурацию nginx:)
Я нашел этот совет здесь