1

私は午前中ずっとこのテーマについて読んでいましたが、結果にはまだ混乱しています.

私が理解していることから、JQuery .ajax .get は datatype="xml" を使用してクロスブラウザーで動作しないはずですが、次の rs フィードは動作します

var rssurl = 'http://gdata.youtube.com/feeds/base/videos/-/trees?orderby=published&alt=rss';

しかし、別のフィードを呼び出そうとしても機能しません。解析エラーが発生します。

var rssurl = 'http://api.flickr.com/services/feeds/photos_public.gne?tags=trees&format=rss2'

このフィードは機能しませんが、ローカルにコピーして呼び出すと機能します。これが、クロスドメインの問題だと思う理由です。

また、Fiddler で表示すると、フィードが実際にダウンロードされていることがわかります。クロスドメイン呼び出しの場合、なぜこれが起こるのでしょうか?フィードがプルされる前に停止するのでしょうか?

フィードをプルするコードの下。

$.ajax({ type: "GET", url: rssurl, dataType: "xml", success: function(data, textStatus, jqXHR) { document.write("got the feed: "+ textStatus+"
"); var $xml = $(data); $xml.find("item").each(function() { var $this = $(this), document.write( $this.find("title").text() ); }); }, error: function(jqXHR, textStatus, errorThrown){ alert('failure'); console.log('status: ' + textStatus); if (textStatus == 'error') console.log(errorThrown); } );

だから私の質問に:

  1. あるフィードに対してクロスドメイン呼び出しを行うことができ、別のフィードではできないのはなぜですか。どっちも禁止じゃないの?
  2. 2 番目のフィードにエラーが含まれていた場合、ローカルで機能するのはなぜですか?
  3. あぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ

乾杯

4

2 に答える 2

1

CORS 規範は、ブラウザーがサーバーに、別のオリジンからのフレームにコンテンツを埋め込むための承認を求めることを指定します。最新のブラウザはすべて、この基準を尊重しています。

api.flickr.com に問い合わせても、承認は得られません。

しかし、gdata.youtube.com に尋ねると、次のヘッダーに応答します。

HTTP/1.1 200 OK
X-GData-User-Country: FR
Access-Control-Allow-Origin: http://fiddle.jshell.net
Content-Type: text/xml; charset=UTF-8
Expires: Fri, 01 Jun 2012 19:41:43 GMT
Date: Fri, 01 Jun 2012 19:41:43 GMT
Cache-Control: private, max-age=1800, no-transform
Vary: *
GData-Version: 1.0
Last-Modified: Fri, 01 Jun 2012 19:41:43 GMT
Content-Encoding: gzip
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE

したがって、コンテンツを埋め込む権限があることがわかります(ここでは、フィドルから尋ねます。したがって、http://fiddle.jshell.netですが、サーバーは単に '*' と答える場合があります。つまり、ヘッダーのこの部分をパーソナライズする必要はありません) 。 .

結論は論理的です。サービスで許可されている場合は、クロスドメイン部分を含めることができます。

また、主にブラウザー側のロックであり、ユーザー (およびデータ) をインジェクションから保護することに注意してください。

于 2012-06-01T19:46:58.963 に答える
0

質問に答えるには:

  1. ドメイン間の呼び出しを許可するかどうかを決定するのは、サーバーのポリシーです。これを別の観点から見ると、FlashSilverlightの開発者はクロスドメイン ポリシーに精通しています。別のドメインの Web サービスにアクセスするには、サービスがクロスドメイン リクエストを承認する必要があります。目的は、クロスサイト スクリプティング攻撃を制限する試みです。
  2. これは、フィードに問題がないことを意味します。それは、リモートで読み込むと、ブラウザがクロスドメイン ポリシーに従ってリクエストをブロックしているだけです。
  3. 大きな音

一部のブラウザーが実際にファイルをロードするという興味深い点を提起します (Fiddler によって確認されたように)。対照的に、IE はファイルをまったくロードしません。答えはわかりませんが、その点について説明をいただければ興味深いです。

于 2012-06-02T05:17:54.620 に答える