2009-04-30 5 views
4

私のサイト(LibraryThing.com)は、Steve(YSlow)Souderの伝道に続いて、並列ロードを容易にするためにドメイン間で要求を分割します。私たちはCSS、JS、およびイメージを行います。あなたはまた、Flashなどを行うことができます。我々はまた、Cross-Subdomainだけでなく、クロスドメインであるPrototypeのGoogleのバージョンを使用します。ドメイン間で要求を分割する - 過大なセキュリティを守る

これはすべてスピードには優れていますが、ユーザーの割合が低い場合は間違っています。私はおそらくIEでおそらく他のブラウザや上流のシステムで過度のセキュリティ設定だと思う。私は驚いているSoudersと他の人はこれについて議論しない、私たちはそれをたくさん得る。

質問は:これを処理する最善の方法は何ですか?

今、ページの一番下に当たったら、読み込んだはずのスクリプトで宣言されたJS変数が設定されているかどうかを確認しています。設定されていない場合は、メインドメインから取得し、次回にサブドメインから読み込まないようにクッキーを設定します。しかし、私たちはJSを一番下に再ロードしているだけなので、CSSも失敗した場合、あなたはジャンクを見ています。

誰かがより一般的なソリューションを持っていますか?私はクッキーを設定し、コンテンツを読み込む一般的な "onload"または "onerror"スクリプトがあると思っていますか?

+0

コードを投稿することはできますか?あなたはこのすべてのクライアント側をやっていますか? –

+0

それはクライアント側の問題です。私のウェブサイトは何かを得ることができます:)。 投稿コードが問題を混乱させるだけの一般的な質問だと思いますが、ここではこれをやっています。 JS varが設定されていない場合は、ローカルに取得してCookieを設定します。 <スクリプトタイプ= "テキスト/ javascriptの"> 場合(typeof演算EXPIREDATE == "未定義")// varが \t { \tのdocument.write( "<スクリプトSRC = 'JS /分/ XYZを設定しません。 js 'type =' text/javascript '><\/script> "); \t var ed = new Date(); \t ed.setMinutes(ed.getMinutes()+ 30); // 5分ごとに有効期限が切れます。 \t document.cookie = "useStaticContent" + "=" + "0" + "; expires =" + ed.toGMTString()+ "; path = /"; \t} – LibraryThingTim

答えて

0

この動作を示す特定のユーザエージェントリストがありますか。 おそらくApacheのconfがこの問題を解決できるでしょうか? (または新しい問題を作成して解決してください:-))。

クッキーフレンジーに気をつけてください。クッキーを追加するほど(メインドメインに)追加すればするほど、クライアントは要求に応じてクライアントを追加する必要があります。

Souderも話しましたが、クライアントのブラウザで送受信されたリクエストの割合を確認するのは常に良いことです。

+0

>ユーザーエージェント いいえIEでセキュリティ設定を使用する前に複製していると思います。私はセキュリティに関する一般的な問題を想定しています。いくつかの非常にタイトな設定では、ページがそのドメインの外側から取り出されるべきではないと仮定しています。ちょっと、あなたは、あなたが本当にうつ病の場合に備えて、あなたのブラウザが外部から画像を取得しないように設定することができます。 > Cookies これは本当です。確かに、セカンダリドメインを使用する理由の1つは、クーポンレスドメインからすべての静的コンテンツをフェッチすることです(Soudersが示唆しているように)。 – LibraryThingTim

0

私はあなたの問題についていくつか野生の推測を取るつもりです。

キャッシュ。これらの問題のユーザーが古いバージョンを持つ可能性があるスクリプトファイルにこれらの変更を加えましたか? IE 6は、過度のキャッシュによって非常に悪いです。

あなたのスクリプトはURLにbuild#を持たないことに気付きましたが、XYZ.js?version = 3はブラウザにXYZ.ks?version = 2のような古いキャッシュされたスクリプトを使用させません。 (画像/ CSSにも適用されます)

また、インラインJavaScriptもHTMLと混在しており、キャッシュされることもあります。あなたのサイトが上のコンテンツのTON(ヒュージページ)

DNSルックアップは、高価であり、非常に長いタイムアウト値を持つことができていない限り、

3ドメインは、おそらく過剰です。

可能性のあるセキュリティの競合のために、別のドメインに自分のサイトのjavascriptを置いても大丈夫です。あなたはjavascript/ajax呼び出しをドメインと同期させておく必要があります。それは価値があるよりも面倒のように思える。

私は5年以上問題なくi.domain.comとdomain.comを使っています。

メインドメインにJSを戻しても問題は解決します。確かにそれはそれほど複雑でなく、扱いが簡単になります。

しかし、正しく実行すると、3つのドメインが機能するはずです。残念ながら、私は問題を見つけるためにこの質問に十分な情報がありません。

+0

LibraryThingTimは問題を「解決」するために1つのドメインのみを使用しています。 もし彼が彼のJS(Dojoや他のフレームワークが、ドメインが1つであっても、それを信じてくれれば、それは何とか高速化します)にクロスドメインローダーを使用しようとすると、同じ問題が再び起こります。 セキュリティポリシーは、JSをロードする方法のために適用することもできます。 –

1

この動作がJSファイルに少なくとも影響する場合、ユーザーのブラウザでこの動作がまだテストされているかどうかを示すCookieを保持することが1つの方法です。テストされていない場合は、このクッキーを単に「成功」​​に設定するクロスドメインスクリプトへの参照を(タグの最初のスクリプト要素として)挿入します。その後すぐにこのクッキーをチェックするインラインJSをいくつか作成し、設定されていない場合は「失敗」に設定してページをリロードします。

次に、サーバー側で同じCookieを確認し、クロスサイトリクエストが "失敗した"結果を持つユーザーに送信されないようにします。

このアプローチでは、クロスサイトリクエストをサポートするブラウザを使用しているユーザーには奇妙な動作は見られませんが、直ちに自動リフレッシュを実行して他のユーザーの問題を直ちに解決する必要があります。

関連する問題