254

サーバー(nginx/node.js)に適切なヘッダーを設定しても、このCORSの問題に悩まされています。

Chrome ネットワーク ペインで確認できます -> 応答ヘッダー:

Access-Control-Allow-Origin:http://localhost

これでうまくいくはずです。

テストに使用するコードは次のとおりです。

var xhr = new XMLHttpRequest();
xhr.onload = function() {
   console.log('xhr loaded');
};
xhr.open('GET', 'http://stackoverflow.com/');
xhr.send();

私は得る

XMLHttpRequest はhttp://stackoverflow.com/を読み込めません。オリジンhttp://localhostは Access-Control-Allow-Origin で許可されていません。

サーバー構成ではなく、クライアントスクリプトに問題があると思われます...

4

11 に答える 11

285

Chromeは、CORS リクエストに対して localhost をサポートしていません(2010 年に開かれたバグで、2014 年に WontFix とマークされています)。

これを回避するには、localho.st(localhost と同じように 127.0.0.1 を指す) ようなドメインを使用するか、フラグを指定して chrome を開始--disable-web-securityします (ただテストしていると仮定します)。

于 2012-06-05T06:06:16.513 に答える
22

本当の問題は、-Allow-すべてのリクエスト ( OPTIONS& POST) を設定すると、Chrome がそれをキャンセルすることです。次のコードはPOST、Chrome を使用した LocalHost に対して機能します

<?php
if (isset($_SERVER['HTTP_ORIGIN'])) {
    //header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header("Access-Control-Allow-Origin: *");
    header('Access-Control-Allow-Credentials: true');    
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 
}   
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

    exit(0);
} 
?>
于 2013-06-15T16:11:55.770 に答える
12

localhostChrome は、オリジンから CORS を使用してリクエストを作成します。これは Chrome の問題ではありません。

読み込めない理由http://stackoverflow.comは、Access-Control-Allow-Originヘッダーがlocalhostオリジンを許可していないためです。

于 2019-09-15T05:06:05.767 に答える