web-dev-qa-db-ja.com

CORSヘッダー「Access-Control-Allow-Origin」がありません

私はasp.netフォームからこの関数を呼び出しており、ajaxの呼び出し中にfirebugコンソールで次のエラーを取得しています。

Cross-Origin Request Blocked:Same Origin Policyは、 http://anotherdomain/test.json でリモートリソースの読み取りを許可しません。 (理由:CORSヘッダー 'Access-Control-Allow-Origin'がありません)。

var url= 'http://anotherdomain/test.json';
        $.ajax({
            url: url,
            crossOrigin: true,
            type: 'GET',
            xhrFields: { withCredentials: true },
            accept: 'application/json'
        }).done(function (data) {
            alert(data);                
        }).fail(function (xhr, textStatus, error) {
            var title, message;
            switch (xhr.status) {
                case 403:
                    title = xhr.responseJSON.errorSummary;
                    message = 'Please login to your server before running the test.';
                    break;
                default:
                    title = 'Invalid URL or Cross-Origin Request Blocked';
                    message = 'You must explictly add this site (' + window.location.Origin + ') to the list of allowed websites in your server.';
                    break;
            }
        });

私は別の方法を実行しましたが、まだ解決策を見つけることができません。

注:サーバー側(API/URL)を変更するサーバー権限はありません。

49
Mayank Modi

これは通常、別のドメインのリソースにアクセスしようとしたときに発生します。

これは、誰もがそのドメインのリソースに自由にアクセスするのを防ぐためのセキュリティ機能です(たとえば、海賊版ドメインであなたのウェブサイトの正確に同じコピーを持つためにアクセスできます)。

応答のヘッダーは、たとえ200OKであっても、他のオリジン(ドメイン、ポート)がリソースにアクセスすることを許可しません。

両方のドメインの所有者である場合、この問題を修正できます。

解決策1:.htaccess経由

これを変更するには、requested domainファイルの.htaccessにこれを書くことができます:

    <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    </IfModule>

解決策2:ヘッダーを正しい方法で設定する

これを要求されたファイルの応答ヘッダーに設定すると、全員がリソースにアクセスできるようになります。

Access-Control-Allow-Origin : *

OR

Access-Control-Allow-Origin : http://www.my-domain.com

平和とコード;)

49
538ROMEO

ajaxリクエストで、次を追加します。

dataType: "jsonp",

行の後:

type: 'GET',

この問題を解決する必要があります..

これがお役に立てば幸いです

6
Pegasus Cozza

以下に示すように、サーバー側のコードを変更する必要があります

public class CorsResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext,   ContainerResponseContext responseContext)
    throws IOException {
        responseContext.getHeaders().add("Access-Control-Allow-Origin","*");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");

  }
}
3
Ritesh Kumar

サーバー側はこれを.phpの上に置きます:

 header('Access-Control-Allow-Origin: *');  

特定のドメイン制限アクセスを設定できます:

header('Access-Control-Allow-Origin: https://www.example.com')
1

上記の回答を読んだ後、なぜこの問題が発生しているのかを理解している必要があります。

self.send_header('Access-Control-Allow-Origin', '*')

サーバー側に上記の行を追加するだけです。

0