6

CORS を使用して別のドメインのサービスにファイルをアップロードしようとしていますが、オリジンが拒否されているために失敗し続けています。私が見る限り、これを許可するために正しいヘッダーが使用されています。

Javascript リクエスト:

  var xhr = new XMLHttpRequest();
  xhr.open('POST', "https://files.example.com", true);                                                                                                                            
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.onreadystatechange = function () {
    if (this.status == 200 && this.readyState == 4) {
      console.log('response: ' + this.responseText);
    }
  };

  xhr.send();

プリフライト OPTIONS リクエストからのレスポンス:

Access-Control-Allow-Headers:Origin, Authorization, Content-Type
Access-Control-Allow-Methods:POST, OPTIONS
Access-Control-Allow-Origin:*
Content-Length:0
Content-Type:application/json
Date:Mon, 19 Nov 2012 23:30:21 GMT

POST リクエストのヘッダー:

Cache-Control:no-cache
Content-Type:application/json
Origin:https://www.example.com
Pragma:no-cache
Referer:https://www.example.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.19 (KHTML, like     Gecko) Chrome/25.0.1325.0 Safari/537.19

エラーが発生します:

XMLHttpRequest cannot load https://files.example.com. Origin https://www.example.com is not allowed by Access-Control-Allow-Origin.
4

4 に答える 4

1

サブドメインが異なります。CORS に関する限り、サブドメイン、プロトコル、およびポートは、Origin と Access-Control-Allow-Origin で同一でなければなりません。

あなたの例では、オリジンのように見えます: https://www.example.com と Access-Control-Allow-Origin は: https://files.example.com

于 2014-03-07T19:18:46.920 に答える
0

プリフライトで許可されるヘッダーのリストにCache-ControlとPragmaを追加してみてください。完全なヘッダーは次のようになります。

Access-Control-Allow-Headers: Cache-Control, Pragma, Origin, Authorization, Content-Type
于 2012-11-20T02:28:41.010 に答える
0

少し遅れていますが、あなたの情報を見ると、飛行前のCORSチェックが正常に機能していることがわかります。これは、ブラウザによって応答がブロックされる実際の(2番目の)CORSリクエストです。

実際の (2 番目の) CORS 要求に対する応答を含めなかったのは残念です。応答拒否の手がかりが含まれていた可能性があるからです。私の疑いでは、飛行前の応答にはヘッダーが正しく含まれていますが、

Access-Control-Allow-Origin:*

...実際の (2 番目の) 応答にそのヘッダーが含まれていない可能性があります。その場合、ブラウザーは応答を正しく拒否します。私の仮定が正しい場合、解決策は、このヘッダーを実際の (飛行前ではない) 応答にも含めることです。

于 2016-06-06T09:55:04.813 に答える