簡體   English   中英

'Access-Control-Allow-Origin'標頭包含多個值

[英]The 'Access-Control-Allow-Origin' header contains multiple values

我正在嘗試向api發送get請求,就像它是一個登錄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,我欣賞任何幫助。

UPDATE響應標頭:

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

您正在嘗試執行跨源資源共享(CORS),這是一種允許從源自該資源的域之外的另一個域請求網頁上的受限資源的機制。 (例如訪問字體或JSON文件)。

瀏覽器限制您從同源策略訪問其他來源的資源,作為互聯網用戶的安全措施。

要解決此問題,您必須選擇:

  1. 允許域http://demo.software.travel上的CORS(但是存在安全問題,更多關於它的描述: https//www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Cross_Origin_Resource_Sharing

在服務器上啟用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完成。

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/

如果你通過添加'access-control-allow-origin *'在nginx中設置“Full”CORS (帶有OPTION預請求)並且單獨添加那個頭(對於Simple CORS - 沒有OPTION預請求)到每個響應中SERVER(例如php):

header('Access-Control-Allow-Origin', "*");

那你就會遇到這個問題。 解決方案:刪除在服務器中添加此標頭的代碼,如果已經在nginx配置中添加此標頭:)

我在這里找到了這個建議

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM