首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制ScriptManager通过SSL提供CDN脚本?

问如何强制ScriptManager通过SSL提供CDN脚本?
EN

Stack Overflow用户
提问于 2011-11-22 12:28:02
回答 5查看 2.5K关注 0票数 11

我们有一个网站在一个网络农场上提供服务。该服务器场位于处理加密的SSL加速器之后。这意味着我们的IIS服务器将所有传入连接视为http,即使用户都通过https连接到站点也是如此。

我们开始使用ScriptManager的EnableCDN=true属性。虽然在我们的开发环境中没有SSL加速器,但是在CDN上对js文件的引用是使用https呈现的,而在生产环境中,它们是通过http不安全地呈现的,这会导致js被阻止,并出现"Only secure content is displayed“错误。

除了手动更新scriptmanager中的所有脚本引用或通过模块重写HTML之外,有谁知道一种强制scriptmanager通过https呈现其引用的方法吗?

编辑:

在做了一些反射器检查之后,我不相信这是可能的。我已经将以下技巧放在适当的位置,但是这显然是脆弱的,因为它涉及访问私有字段。如果有人能看到更好的方式,我很想听听。

代码语言:javascript
复制
var secureConnectionField = ScriptManager.GetType().GetField("_isSecureConnection", BindingFlags.Instance | BindingFlags.NonPublic);
if (secureConnectionField != null)
    secureConnectionField.SetValue(ScriptManager, true);
EN

回答 5

Stack Overflow用户

发布于 2012-11-12 00:01:59

如果您使用的是ASP.NET 4.0或更高版本,那么解决方案之一就是使用ScriptManager控件的ScriptResourceMapping功能。

例如,在全局asax中,您可以添加以下代码:

代码语言:javascript
复制
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"

});

}

因此,如您所见,您可以显式设置CDN路径。此外,还可以覆盖标准Ajax文件的脚本映射。

更多信息可以在本文中找到:http://weblogs.asp.net/infinitiesloop/archive/2009/11/23/asp-net-4-0-scriptmanager-improvements.aspx

票数 1
EN

Stack Overflow用户

发布于 2013-04-10 05:44:42

为了处理与您类似的情况,我将BundleCollection配置为使用CDN和两个不同版本的库进行调试和生产。

这些设置的结果是,调试时将使用非最小化的,而CDN中的最小化的将用于生产。局部最小化的那个被忽略。

代码语言:javascript
复制
[...]  
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);

注意,我没有在CdnPath中指定协议,客户端的浏览器将自动使用客户端连接的当前协议,http或https。

客户端的浏览器将在生产环境中接收到以下标记:

代码语言:javascript
复制
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

开发者的浏览器将收到以下标签:

代码语言:javascript
复制
<script src="/Scripts/jquery-1.9.1.js"></script>

两者都将在浏览器上使用正确的协议。

票数 1
EN

Stack Overflow用户

发布于 2011-12-15 06:22:33

通常情况下,您的开发服务器和生产服务器将具有不同的IP范围。要求开发团队根据框架dlls中的IP地址应用“协议切换”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8221988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档