6

私はうっかりしてNextBusへのクロスドメインAJAX呼び出しを(jQueryを使用して)作成しました:

$.ajax({
      url: 'http://webservices.nextbus.com/service/publicXMLFeed?command=predictions&a=sf-muni&r=1&s=6294',
      dataType: 'xml',
      success: function(data) {
           do_stuff();
      }
});

つまり、別のドメインからのものであるにもかかわらず、すべてのブラウザで動作します。同一生成元ポリシーを考えると、なぜこれが実際に機能するのですか?

ページはここにあります:http ://sftransitfirst.org/F/ 、プルダウンからストップを選択すると、ajaxがトリガーされます。

予想どおり、 Google Maps API Webサービスへの同様の呼び出しは、使い慣れたものでは失敗しますOrigin ... is not allowed by Access-Control-Allow-Origin(jsonpをサポートしていません)。

4

2 に答える 2

11

次のような方法で、クロスドメイン アクセスを明示的に許可している必要があります。

<?php header('Access-Control-Allow-Origin: *'); ?>

またはhtaccessで:

<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>
于 2012-08-28T15:37:29.630 に答える
5

最新の Web API の多くは、クロスドメイン リソース共有(CORS) を有効にします。CORS は、Web サイトが自発的にページをクロスドメイン スクリプトで使用できるようにする方法です。サーバーからのAccess-Control-Allow-OriginHTTP ヘッダーは、スクリプトが別のオリジンで実行されている場合でも、スクリプトが Ajax を使用してページにアクセスできることを Web ブラウザーに通知します。サーバーが CORS ヘッダーを提供しない場合、ブラウザーは通常どおり SOP を適用します。

ほとんどの API は、ページをクロスドメイン スクリプトに公開することを選択します。これは、ほぼすべてのユーザーが、自分のドメインから Ajax を介して API にアクセスできるようにしたいと考えているためです。

于 2012-08-28T15:45:54.780 に答える