1

localhost から Google API にアクセスしようとしています。クロムは起源のためにそれは不可能だと言っています

XMLHttpRequest cannot load https://maps.googleapis.com/maps/api.... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. 

私はhttps-browserifyajaxリクエストを行うために使用しています。

   options = {
      hostname: "maps.googleapis.com",
      port: 443,
      path: "/maps/api/....",
      method: "get",
      headers: {
        "Origin": null,
        "Referer": null
      }
    };
    result = null;
    req = https.request(options, function(res) {
      res.on("data", function(chunk) {
        return result += chunk;
      });
      return res.on("end", function() {
        debugger;
      });
    });
    req.end();

しかし、これは役に立ちませんでした。Originこのリクエストを行うとき、Refererヘッダーはまだそこにあります。どうすれば削除できますか?

4

3 に答える 3

2

Originオブジェクトによって安全でないヘッダーと見なされRequestます (ソース コード)

これが、それらを削除できない理由です。Request の実装では、安全と見なされるヘッダーのみを削除または変更できます。

于 2014-04-01T18:02:39.470 に答える
0

ウィキペディアまたはmdnで同じオリジン ポリシーを確認してください。

リクエストを分析するには、fiddlerのような HTTP Sniffer を使用する必要があります。次に、Access-Control-Allow-Origin: *ヘッダーが存在するかどうかを確認する必要があります! このヘッダーが応答に存在する場合、要求はブラウザからのみ機能します! したがって、サーバー、あなたの場合はGoogleサーバーが送信する必要があります! Google は通常、ブラウザ内で使用するすべてのパブリック API でこれを行います。それ以外の場合、AJAX リクエストを介してこの URL に直接アクセスする方法はありません。

same origin policyはセキュリティ上の理由から構築されたブラウザ機能であることを理解することが重要です。そのため、node.js やその他のサーバー側プログラミング環境などのブラウザ以外の環境からリクエストを行っても、影響はありません。また、ブラウザを介して直接リクエストを行う場合にも影響しません。これは、一般的なすべてのリクエストではなく、AJAX リクエストに対する制限であるためです。

この制限を回避する方法があるため、ヘッダーを送信しないサーバーに AJAX リクエストを送信する必要がある場合Access-Control-Allow-Originでも、サーバーによってリクエストをプロキシできます。

別の回避策は ですJSONPが、これは要求されたサーバーからもサポートされます!

重要な注意:Access-Control-Allow-Originヘッダーでリクエストの代わりに*オリジンが返された場合、サーバーから返されたオリジンにいる限り、リクエストは可能です! おそらく、サーバーは生産的なオリジンを返していますが、ローカルホストを拒否していますか?

少なくとも Google からreCAPTCHAは、API キーを特定のオリジンに制限できることがわかっています。開発目的で、通常、Google は からlocalhostのすべてのリクエストを許可しますが、何らかの理由であなたの場合ではない可能性があります。これを確認する最善の方法は、前述のように単純な HTTP スニファーを使用して HTTP トラフィックを分析することです。

于 2014-04-01T15:44:55.187 に答える
0

Google Maps API には Access-Control-Allow-Origin があります。

localhostページにjqueryをロードした後、以下を使用してすばやくテストできました。動作します。

$.getJSON("https://maps.googleapis.com/maps/api/timezone/json?location=-33.86,151.20")

于 2014-03-27T00:42:51.440 に答える