web-dev-qa-db-ja.com

httpの代わりにhttpsを使用すると、JSONPリクエストが失敗します

JQueryを使用してJSONPリクエストを行うAPIクライアントがあります。このAPIクライアントがSSLを使用していない場合はすべて正常に機能しますが、SSLを使用している場合は失敗します。

たとえば、URL http://apiclient.comがあり、このドメインから次のJSONPリクエストを行っています。

$.ajax({
    url: url,
    dataType: "jsonp",
    contentType: "application/json; charset=utf-8",
    success: function(data)
    {
        $.each(data.services, function(index, service) {
            processService(service);
        });
    }
});

successのurlおよびcallback関数で指定されたAPIホストに対して行われた適切な要求が適切に呼び出され、適切にフォーマットされたデータが渡されたことがわかります。

ただし、上記のAPIクライアントのURLをhttps://apiclient.comに変更すると、APIホストでリクエストが観察されません。ログのどちらの側にもエラーは表示されません。

注:唯一の違いは、APIクライアント側のhttpからhttpsです。

Httpsドメインを使用する場合、JSONPリクエストを別の方法で処理する必要がありますか?

ありがとう。

編集:この問題はChromeでのみ発生します。 FirefoxとSafariで動作します。しかし、FireFoxで、暗号化されたサイトから暗号化されていないリクエストを送信しようとしているという警告が表示されました。私はそれを許可し、警告を二度と見ませんでした。

19
datauser

解決策を見つけました。問題は、JQueryやその他のリソースが安全でないサイトからインポートされたことでした。解決策はhttpsから参照することでした。

11
datauser

プロトコルを変更すると、URLの他の部分を変更するのと同じ効果があります。これにより、同一生成元ポリシーの違反がトリガーされ、クロスドメインモードになります。すでにクロスドメインアクセスが機能している場合は、httpと同様にhttpsでも引き続き機能します。

たとえばgetJSONを使用できます

$.getJSON('ajax/test.json', function(data) {
  $('.result').html('<p>' + data.foo + '</p>'
    + '<p>' + data.baz[1] + '</p>');
});

完全なgetJSONドキュメントを確認してください http://api.jquery.com/jQuery.getJSON/

私は間違っていましたか... Juqery.ajaxを使用すると、クロスブラウザの問題が発生しますが、Jquery.getJSONでは発生しません

http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29

これはクロスドメインgetJSONの例です

firefoxにはHTTPSに問題があります。このようにリクエストを送信すると、修正されることがわかっています。

$.getJSON('ajax/test.json',{}, function(data) {
  $('.result').html('<p>' + data.foo + '</p>'
    + '<p>' + data.baz[1] + '</p>');
});

soruce AJAX https POST Firefoxでjqueryを使用したリクエストは失敗します

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

1
Zahid Riaz

HttpとhttpsのJSONPリクエストに違いはありません。

代わりに.getJSONを試してください。

$.getJSON(url, function(data) {
  $.each(data.services, function(index, service) {
        processService(service);
    });
});

JQuery.ajax()を使用すると、クロスブラウザーの問題が発生しますが、jQuery.getJSON()の場合は発生しません。詳細については、jQueryサイトを参照してください。 http://api.jquery.com/jQuery.getJSON/ ==

この問題に関する同様の投稿があります: JSONPはJQueryを使用してHTTPSプロトコルからJSONを取得します

1
stack247