web-dev-qa-db-ja.com

「Access-Control-Allow-Origin」ヘッダーに複数の値が含まれています

ログインURLのようにAPIにGETリクエストを送信しようとしています

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 、*」が含まれていますが、許可されるのは1つだけです。したがって、オリジン ' 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
6
Alaa M. Jaddou

Cross-Origin Resource Sharing(CORS)を実行しようとしています。これは、Webページ上の制限されたリソースを、リソースの発信元のドメイン以外の別のドメインから要求できるようにするメカニズムです。 (フォントやJSONファイルへのアクセスなど)。

ブラウザは、インターネットユーザーのセキュリティ対策として、Same-Originポリシーの時点で、他のオリジンからのリソースへのアクセスを制限します。

この問題を回避するには、オプションが必要です。

  1. ドメインでCORSを許可する http://demo.software.travel (ただし、セキュリティ上の懸念があるため、ここで詳細を説明します: 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/

4
Bamieh

'-access-control-allow-Origin *'を追加してnginxで "Full" CORS (OPTION事前要求あり)を設定し、独立してそのヘッダーを追加する場合( Simple CORS -OPTION事前要求なし)SERVERの各応答(例:php):

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

その後、この問題が発生します。解決策:nginx configにこのヘッダーを既に追加している場合、サーバーにこのヘッダーを追加するコードを削除します:)

私はこのアドバイスを見つけました こちら

4