CDN脚本故障转移机制
CDN script failover mechanism
我在 MVC 应用程序中使用脚本包来使用以下代码从 CDN 加载脚本:
bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));
如果 CDN 失败,它应该从本地存储库(从项目内部)加载脚本。
我已添加:
bundles.UseCdn = true;
和
BundleTable.EnableOptimizations = true;
确保先加载 CDN。
当我从我的网络(public 网络)尝试时,它工作正常:脚本从 CDN 加载没有任何问题。
如果我从我的客户网络(公司网络)尝试,CDN 被阻止并且没有加载替换脚本。我不明白为什么我设置的故障转移机制不起作用。
你知道为什么会这样吗?
您使用的代码不是故障转移代码。如果你看一下 the docs for this 它明确指出如果你只是 运行
bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));
CDN 将在生产中加载,Include
路径将在调试中加载。然后他们说
jQuery will be requested from the CDN while in release mode and the
debug version of jQuery will be fetched locally in debug mode. When
using a CDN, you should have a fallback mechanism in case the CDN
request fails. The following markup fragment from the end of the
layout file shows script added to request jQuery should the CDN fail.
他们甚至给你一个示例代码
<script type="text/javascript">
if (typeof jQuery == 'undefined') {
var e = document.createElement('script');
e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")';
e.type = 'text/javascript';
document.getElementsByTagName("head")[0].appendChild(e);
}
</script>
作为检查以确保 CND 已加载,如果没有则进行故障转移。
如果您在 .Net 4.5 上使用 MVC,请查看 CdnFallbackExpression
调用以让它为您自动生成、检查和回退。
您可能还会发现 this blog from Scott Hanselman 也有帮助。
我在 MVC 应用程序中使用脚本包来使用以下代码从 CDN 加载脚本:
bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));
如果 CDN 失败,它应该从本地存储库(从项目内部)加载脚本。
我已添加:
bundles.UseCdn = true;
和
BundleTable.EnableOptimizations = true;
确保先加载 CDN。
当我从我的网络(public 网络)尝试时,它工作正常:脚本从 CDN 加载没有任何问题。
如果我从我的客户网络(公司网络)尝试,CDN 被阻止并且没有加载替换脚本。我不明白为什么我设置的故障转移机制不起作用。
你知道为什么会这样吗?
您使用的代码不是故障转移代码。如果你看一下 the docs for this 它明确指出如果你只是 运行
bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));
CDN 将在生产中加载,Include
路径将在调试中加载。然后他们说
jQuery will be requested from the CDN while in release mode and the debug version of jQuery will be fetched locally in debug mode. When using a CDN, you should have a fallback mechanism in case the CDN request fails. The following markup fragment from the end of the layout file shows script added to request jQuery should the CDN fail.
他们甚至给你一个示例代码
<script type="text/javascript">
if (typeof jQuery == 'undefined') {
var e = document.createElement('script');
e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")';
e.type = 'text/javascript';
document.getElementsByTagName("head")[0].appendChild(e);
}
</script>
作为检查以确保 CND 已加载,如果没有则进行故障转移。
如果您在 .Net 4.5 上使用 MVC,请查看 CdnFallbackExpression
调用以让它为您自动生成、检查和回退。
您可能还会发现 this blog from Scott Hanselman 也有帮助。