同じサーバー上に2つの別々のアプリがあり、EmberJSはバックエンドAPIへのクロスドメイン呼び出しを行おうとしています。
その特定のオリジンからのクロスドメインリクエストを許可するようにバックエンドAPIを設定しました。しかし、そのような設定でJSONPを使用しないようにする方法はありますか? $.ajax
は、クロスドメインリクエストが送信される前にブロックしています。そうでない場合、JSフロントエンドソースからのリクエストを受け入れるために実装したCORSのポイントは何ですか?
[〜#〜]編集[〜#〜]
AJAXリクエスト:
$.ajax({
url: "api.lvh.me:3000/accounts/login",
data: cred,
type: "POST",
xhrFields: {
withCredentials: true
},
success: function(response){
alert('succeeded!');
console.log(response);
alert(response);
},
failure: function(message){
alert("failed");
console.log(message);
alert(message);
}
});
CORSを有効にする場合は、JSONPを使用する必要はありません。
Access-Control-Allow-Origin: http://www.example.com
このヘッダーが応答に設定されている場合、通常のXmlHttpRequestは、同じドメインのように応答にアクセスできます。このヘッダーが正しく設定されているかどうかを確認してください。
Jqueryを使用している場合にこのリンクが役立つことを願っています A CORS POSTリクエストはプレーンJavaScriptから機能しますが、jQueryでは機能しませんか?
更新:例
var xmlhttp= new XMLHttpRequest();
var url="https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control";
xmlhttp.open("GET",url,false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.send();
どのドメインでもこれを試してみてください。応答があります。
更新ソリューション:
「http://」のないURLをリクエストすると問題が発生し、「http://」を前に付けると問題が解決しました
Rails 5でrack-cors
を使用して、すべてのURLを許可するように設定できます。
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [
:get, :post, :put, :patch, :delete, :options, :head
]
end
end
クロスドメイン環境では、多くの無料ホストがクロスドメインCORSをサポートしていないため、CORSの代わりにJSONPを使用することをお勧めします。詳細は 実例 -JSONPとCORSの両方です。