2011-11-22 9 views
11

私たちはウェブファームにサイトを提供しています。ファームは暗号化を処理するSSL Accelleratorの後ろにあります。つまり、ユーザーがすべてhttps経由でサイトに接続しても、IISサーバーはすべての着信接続をhttpとして表示します。ScriptManagerにSSL経由でCDNスクリプトを提供させるにはどうすればいいですか

ScriptManagerのEnableCDN = trueプロパティを使用し始めています。 SSL Accelleratorが存在しない開発環境では、CDN上のjsファイルへの参照がhttpsでレンダリングされますが、プロダクション環境ではhttpで安全でなくなり、jsがブロックされる原因となります。 "エラー。

scriptmanagerのすべてのスクリプトリファレンスを手動で更新したり、モジュール経由でHTMLを書き直したりするのには不十分ですが、httpsを通じてスクリプトマニュアに参照を表示させる方法は誰にも分かりますか?

EDIT:

いくつかの反射の見直しを行った後、私はこれが可能であるとは思いません。私は次のようなハッキングを施しましたが、これはプライベートフィールドへのアクセスを含むため、明らかに脆弱です。誰かがより良い方法を見ることができれば、私はそれを聞いてみたい。

var secureConnectionField = ScriptManager.GetType().GetField("_isSecureConnection", BindingFlags.Instance | BindingFlags.NonPublic); 
if (secureConnectionField != null) 
    secureConnectionField.SetValue(ScriptManager, true); 
+2

私はあなたが記述する場合のためにそれを試していないが、いくつかの場所では、プロトコルを省略することができますHTML/JSである、とブラウザが同じプロトコルを使用してURLを要求します含まれているページのたとえば、 "//cdn.mydomain.com/myfile.js" – RickNZ

+0

ヒントはありがとうございますが、この場合はレンダリングされたURLを制御しません。フレームワークDLLに登録されています。私は、CDN参照をレンダリングするときにプロトコルを省略するようにスクリプトマネージャーに指示することは遠いとは考えていません。 –

+0

ScriptManagerはコントロールなので、パス生成ロジックをオーバーライドするコントロールアダプターを作成するか、元のコントロールを継承する新しいコントロールを作成し、タグマッピングを使用してアプリで動的に置き換えることができます。 – RickNZ

答えて

0

通常、開発サーバーと運用サーバーのIP範囲は異なります。開発チームに、フレームワークdllのIPアドレスに基づいて "プロトコルスイッチ"を適用するよう依頼してください。

+0

アイデアをありがとう、しかしそれは実際に私たちのためには、ウェブサーバーはまだ設計によってhttpでページを参照してくださいとして動作しません。 SSL accelleratorを使用して、IISの暗号化負荷を移動します。スクリプトマネージャーは、IISが何を提供しているかを見ています。 –

1

ASP.NET 4.0以上を使用する場合、解決策の1つは、ScriptManagerコントロールのScriptResourceMapping機能を使用することです。あなたが明示的にCDNパスを設定することができます見ることができるように、そう

void Application_Start(object sender, EventArgs e) { 

// map a simple name to a path 

ScriptManager.ScriptResourceMapping.AddDefinition("jQuery", new ScriptResourceDefinition { 

    Path = "~/scripts/jquery-1.3.2.min.js", 

    DebugPath = "~/scripts/jquery-1.3.2.js", 

    CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.min.js", 

    CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.js" 

}); 

} 

:あなたは次のコードを追加できるグローバルasaxに例えば

。また、標準のAjaxファイルのスクリプト・マッピングをオーバーライドすることもできます。

詳しい情報は、この記事で見つけることができます:http://weblogs.asp.net/infinitiesloop/archive/2009/11/23/asp-net-4-0-scriptmanager-improvements.aspx

-1

はあなたに似たような状況に対処するために、このGlobal.asaxの

void Application_Start(object sender, EventArgs e) { 

// map a simple name to a path 

ScriptManager.ScriptResourceMapping.AddDefinition("jQuery", new ScriptResourceDefinition { 

    Path = "~/scripts/jquery-1.3.2.min.js", 

    DebugPath = "~/scripts/jquery-1.3.2.js", 

    CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.min.js", 

    CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.js" 

}); 

} 
+0

すべてのdllで参照されるすべてのjsファイルに対して、すべてのCDNパスを上書きする必要があります。これは実用的ではないようです。 –

1

を使用して、私は、CDNを使用するようにBundleCollectionを設定し、二つの異なるバージョンデバッグとプロダクションのためのライブラリの

これらの設定の結果は、デバッグ中に非拡張のものが使用され、CDNからの縮小されたものが本番環境で使用されることです。地方のものは無視されます。私はCdnPathでプロトコルを指定していない

[...] 
bundles.UseCdn = true; 
[...] 
var jQueryBundle = new ScriptBundle("~/bundles/jquery"); 
jQueryBundle.CdnPath = "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"; 
jQueryBundle.Include("~/scripts/jquery-1.9.1.js"); 
jQueryBundle.Include("~/scripts/jquery-1.9.1.min.js"); 
bundles.Add(jQueryBundle); 

注、クライアントのブラウザが自動的にクライアントがHTTPまたはHTTPSから接続されている現在のプロトコルを使用します。

クライアントのブラウザには、生産に次のタグを受け取ります:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 

開発者のブラウザには次のタグを受け取ります:

<script src="/Scripts/jquery-1.9.1.js"></script> 

どちら

は、ブラウザ上で正しいプロトコルを使用します。

0

あなたは@Razorを使用しています。ASPX、あなたはLayout/MasterPageをどこかに持つと仮定します。

CDNs '真のパワーは、具体的にはあなたのサーバ以外の何らかのソースからリモートでホストされたスクリプトを持つことにあります。これにより、ユーザーのブラウザが別の場所からブラウザを取得した可能性が高くなります。 CDNは、AngularJSまたはjQueryのようなコアライブラリに最適です。インポートするスクリプトの人気が低いほど、CDNで提供することはあまり推奨されません。

レイアウト上でハードコードするのが適切です。 http://またはhttps://でプロトコルを指定する代わりに//だけを使用する場合は、ページが呼び出されているのと同じプロトコルが必要です。

<script type="text/javascript" src="//{yourCDNsource}"></script>

ローカルで圧縮した場合/それが目的に反しリモートCDNを縮小化。それらの場合は、NuGetまたはBowerを使用する方が効果的です。

チェックGoogle CDNs

関連する問題