Заголовок "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).

Браузеры ограничивают ваш доступ к ресурсам из других источников в соответствии с политикой того же происхождения в качестве меры безопасности для пользователей Интернета.

Чтобы обойти эту проблему, у вас есть варианты:

  1. разрешить 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

  1. если вам не предоставлен общий доступ к ресурсам с этим доменом, вы можете использовать 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:)

Я нашел этот совет здесь

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