【发布时间】:2011-11-22 04:28:01
【问题描述】:
我们在网络场上提供了一个网站。该场位于处理加密的 SSL 加速器后面。这意味着我们的 IIS 服务器将所有传入连接视为 http,即使用户都通过 https 连接到该站点。
我们开始使用 ScriptManager 的 EnableCDN=true 属性。在我们没有 SSL 加速器的开发环境中,对 CDN 上 js 文件的引用使用 https 呈现,而在生产环境中,它们通过 http 呈现不安全,这导致 js 被“仅显示安全内容”阻止" 错误。
没有手动更新 scriptmanager 中的所有脚本引用或通过模块在输出时重写 HTML,有没有人知道强制脚本管理器通过 https 呈现其引用的方法?
编辑:
在做了一些反射器审查后,我认为这是不可能的。我已经实施了以下黑客攻击,但这显然很脆弱,因为它涉及访问私有字段。如果有人能看到更好的方式,我很想听听。
var secureConnectionField = ScriptManager.GetType().GetField("_isSecureConnection", BindingFlags.Instance | BindingFlags.NonPublic);
if (secureConnectionField != null)
secureConnectionField.SetValue(ScriptManager, true);
【问题讨论】:
-
你描述的情况我没试过,但是HTML/JS中有几个地方可以省略协议,浏览器会使用与for相同的协议来请求URL包含页面。例如,“//cdn.mydomain.com/myfile.js”
-
感谢您的提示,但在这种情况下,我不控制呈现的 url - 它已在框架 dll 中注册。我不相信在渲染 CDN 引用时告诉脚本管理器省略协议。
-
ScriptManager 是一个控件,因此您应该能够构建一个将覆盖路径生成逻辑的控件适配器,或者构建一个从原始控件继承的新控件,并使用标签映射动态在您的应用中替换它。
标签: c# asp.net ssl cdn scriptmanager