2012-01-20 6 views
2

マイドメイン:

<!DOCTYPE html> 
<html> 
<head> 
<title>scrape</title> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
</head> 
<body> 
    <script> 
     $.ajax({url:'http://their-domain.com/index.html', 
     dataType:'html', 
      success:function(data){console.log(data);} 
     }); 
    </script> 
</body> 
</html> 

自分のドメインをこすりすることができることから私を防ぎ何?どんな仕事?

補足:サーバー側のスクリプトを使用することをお勧めしますが、この問題をクライアントを使用して排他的に解決することに興味があります。

"jsonp"を使用してリクエストをフォーマットすると、少なくとも応答は得られますが、「キャッチされないSyntaxError:予期しないトークン<」というエラーが発生します。だから私は彼らのドメインからの応答を得ているが、パーサーはそれがjsonであることを期待している。 (これも同様です)私は、クライアントがこのレスポンスを受け入れることを騙す方法であるかどうかを確認しようと、これをハッキングしています。私はこれが非典型的であることを知っていることをご理解ください。

<!DOCTYPE html> 
<html> 
<head> 
<title>scrape</title> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
</head> 
<body> 
    <script> 
     $.ajax({url:'http://their-domain.com/index.html', 
     dataType:'jsonp', 
      success:function(data){console.log(data);} 
     }); 
    </script> 
</body> 
</html> 
+1

http://en.wikipedia.org/wiki/Same_origin_policyまたはhttps://developer.mozilla.org/en/Same_origin_policy_for_JavaScript –

+0

を参照してください。これを有効にすると、更新する必要があります/穴にパッチを当てる。それがうまくいかない理由があり、ほとんどの答えが指摘しているように.... SOP。 – Eonasdan

答えて

2

これは、クロスドメインリクエストを防ぐ同一生成元ポリシー、です。 htmlをスクラップしたい場合は、コンテンツを取得するためにサーバー側のプロセスを作成し、ajaxを使用して、収集したデータを含むサーバーに対して要求を行う方がよいでしょう。

2

Same Origin Policyは、クライアントサイドスクリプトが要求の発信元ではないドメインからデータを取得するのを防ぎます。プロキシとして動作するサーバー側のスクリプトが必要です

0

回避策として、サーバーサイドスクリプト(PHPなど)を作成してページを取得し、$.ajaxに呼び出す方法があります。

6

周りSame Origin Policy

  1. プロキシを取得するための4つの方法があります - あなたは、あなたのサーバーからそれを要求し、サーバーが他のドメインからそれを要求し、サーバーがブラウザ
  2. Flash cross domain policyに返します - 他のドメインなければなりません自分のサイト
  3. Cross domain HTTP headerへのcrossdomain.xmlファイルを追加 - 他のドメインは、自分のページに
  4. JSONPAccess-Control-Allow-Originヘッダを追加する必要があります - それは、JSONのWebですコールバック機能を提供するサービスです。他のドメインはこれを実装する必要があります。

注:他のドメインの助けを借りずにそれを行うにONLY方法は、あなた自身のサーバーを経由してルーティングする、#1です。

関連する問題