添加nosniff头后C# Web应用异常,如何添加MIME类型至请求头?
解决Ext.NET应用添加X-Content-Type-Options:nosniff后的脚本执行异常问题
问题原因
添加X-Content-Type-Options: nosniff后,浏览器开启了严格MIME类型检查。你的Ext.NET应用中,extnet-ini-js/ext.axd请求返回的MIME类型是application/json,但浏览器要求脚本类资源必须返回application/javascript这类可执行的MIME类型,因此脚本被拦截,导致应用异常。
解决方案
方案1:修改web.config中Ext.NET Handler的Content-Type
直接在web.config的<handlers>节点里,为Ext.NET的资源处理器指定正确的MIME类型:
<system.webServer> <handlers> <!-- 找到或添加Ext.NET的handler配置,添加contentType属性 --> <add name="ExtNetHandler" path="*/ext.axd" verb="*" type="Ext.Net.ResourceHandler" preCondition="integratedMode" contentType="application/javascript" /> </handlers> <!-- 保留你的安全头配置 --> <httpProtocol> <customHeaders> <add name="X-Content-Type-Options" value="nosniff" /> </customHeaders> </httpProtocol> </system.webServer>
注意:确保name、path和type与你现有配置一致,核心是添加contentType="application/javascript"。
方案2:自定义Ext.NET资源处理器,动态返回正确MIME类型
如果方案1不生效,可通过继承Ext.NET的ResourceHandler来重写MIME类型逻辑:
- 创建自定义处理类:
using Ext.Net; namespace YourAppNamespace // 替换成你的项目命名空间 { public class CustomExtResourceHandler : ResourceHandler { protected override string GetContentType() { // 针对ini-js路径的请求,返回javascript类型 if (Context.Request.Path.Contains("extnet-ini-js")) { return "application/javascript"; } // 其他资源保持原有类型 return base.GetContentType(); } } }
- 修改web.config中的handler指向自定义类:
<system.webServer> <handlers> <add name="ExtNetHandler" path="*/ext.axd" verb="*" type="YourAppNamespace.CustomExtResourceHandler" preCondition="integratedMode" /> </handlers> <!-- 保留安全头配置 --> <httpProtocol> <customHeaders> <add name="X-Content-Type-Options" value="nosniff" /> </customHeaders> </httpProtocol> </system.webServer>
方案3:临时针对特定路径移除安全头(不推荐)
如果前两种方案无法实施,可临时对extnet-ini-js/ext.axd路径移除X-Content-Type-Options头(会降低该路径的安全防护,仅作为应急方案):
<location path="extnet-ini-js/ext.axd"> <system.webServer> <httpProtocol> <customHeaders> <remove name="X-Content-Type-Options" /> </customHeaders> </httpProtocol> </system.webServer> </location>
内容的提问来源于stack exchange,提问作者mrd
相关产品推荐
相关产品推荐

