web-dev-qa-db-ja.com

CORS-クロスドメインAJAXサーバーでオリジンを許可することでJSONPなし

同じサーバー上に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);
    }
});
8
darksky

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://」を前に付けると問題が解決しました

9
Balaji Sivanath

Rails 5rack-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
0

クロスドメイン環境では、多くの無料ホストがクロスドメインCORSをサポートしていないため、CORSの代わりにJSONPを使用することをお勧めします。詳細は 実例 -JSONPとCORSの両方です。

0
Leon Rom