私は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)を変更するサーバー権限はありません。
これは通常、別のドメインのリソースにアクセスしようとしたときに発生します。
これは、誰もがそのドメインのリソースに自由にアクセスするのを防ぐためのセキュリティ機能です(たとえば、海賊版ドメインであなたのウェブサイトの正確に同じコピーを持つためにアクセスできます)。
応答のヘッダーは、たとえ200OKであっても、他のオリジン(ドメイン、ポート)がリソースにアクセスすることを許可しません。
両方のドメインの所有者である場合、この問題を修正できます。
これを変更するには、requested domainファイルの.htaccessにこれを書くことができます:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
これを要求されたファイルの応答ヘッダーに設定すると、全員がリソースにアクセスできるようになります。
Access-Control-Allow-Origin : *
OR
Access-Control-Allow-Origin : http://www.my-domain.com
平和とコード;)
ajaxリクエストで、次を追加します。
dataType: "jsonp",
行の後:
type: 'GET',
この問題を解決する必要があります..
これがお役に立てば幸いです
以下に示すように、サーバー側のコードを変更する必要があります
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");
}
}
サーバー側はこれを.phpの上に置きます:
header('Access-Control-Allow-Origin: *');
特定のドメイン制限アクセスを設定できます:
header('Access-Control-Allow-Origin: https://www.example.com')
上記の回答を読んだ後、なぜこの問題が発生しているのかを理解している必要があります。
self.send_header('Access-Control-Allow-Origin', '*')
サーバー側に上記の行を追加するだけです。