为什么 Azure Front Door 会破坏 HttpHandler 中设置的内容类型标头?

问题描述 投票:0回答:1

我们正在 Azure 中的 .NET 4.8 上运行 ASP.NET MVC 5 应用程序。我设置了一个

HttpHandler
来向静态文件添加标头。它在我们没有前门的应用程序服务上运行没有问题,但在有前门的应用程序服务上,似乎
Content-Type
标头在某些文件上不一致地丢失。

唯一一致的是,如果

HttpHandler
被击中,就会出现问题(我可以将变量
ConfigHelper.IsUsingAccessControlAllowOrigin
设置为 false 以跳过添加标头,但它仍然会发生)。

由于此错误,静态文件未加载:

拒绝执行来自“https://example.com/Scripts/select2.full.js”的脚本,因为其 MIME 类型('')不可执行,并且启用了严格的 MIME 类型检查。

这是

HttpHandler
代码:

public class CorsHttpHandler : IHttpHandler
{
    protected RequestContext RequestContext { get; set; }

    public CorsHttpHandler() : base() { }

    public CorsHttpHandler(RequestContext requestContext)
    {
        this.RequestContext = requestContext;
    }

    public void ProcessRequest(HttpContext context)
    {
        if (ConfigHelper.IsUsingAccessControlAllowOrigin && !context.Response.Headers.AllKeys.Any(x => x.Equals(ConfigHelper.AccessControlAllowOriginKey, StringComparison.OrdinalIgnoreCase)))
        {
            context.Response.AddHeader(ConfigHelper.AccessControlAllowOriginKey, ConfigHelper.WildCardAsterik);
        }
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

我在

HttpHandler
中像这样配置了
web.config
(侧边栏:我这样设置它们,因为逗号分隔的路径不起作用):

<add name="CorsHttpHandlerCss" 
     verb="*" path="*.css" 
     type="Example.Mvc.Handlers.CorsHttpHandler, Example.Mvc" 
     preCondition="managedHandler" />
<add name="CorsHttpHandlerJs" 
     verb="*" path="*.js" 
     type="Example.Mvc.Handlers.CorsHttpHandler, Example.Mvc" 
     preCondition="managedHandler" />
<add name="CorsHttpHandlerJpg" 
     verb="*" path="*.jpg" 
     type="Example.Mvc.Handlers.CorsHttpHandler, Example.Mvc" 
     preCondition="managedHandler" />
<add name="CorsHttpHandlerPng" 
     verb="*" path="*.png" 
     type="Example.Mvc.Handlers.CorsHttpHandler, Example.Mvc" 
     preCondition="managedHandler" />

解决此问题的一个选项是放弃在 C# 中设置此标头,购买 Front Door / CDN 的高级实例,然后在那里设置标头。 然而,我认为这个问题需要解决,因为人们如何在没有这个问题的情况下使用带有前门的

HttpHandler

asp.net-mvc azure-web-app-service httphandler azure-front-door
1个回答
0
投票

发现 Azure Front Door Classic 出现此问题,但标准版从未出现此问题。我们将两者都用于我们的一种产品。

我们使用部署槽为 Azure 应用服务分配新的部署,并且 Azure 将 .js 文件缓存在单独的文件夹中,例如 u000b21js hisfile.js,虽然这是第一次转换,但如果有人偶尔访问新文件,则 mime 标头设置不正确,并且该用户被告知该缓存文件在 90 天内有效,这对他们来说是一场噩梦浏览器被告知该文件已缓存,无需获取新文件,并且缺少的 mime 标头会阻止应用程序加载,有时是整个应用程序,有时只是一个模块。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.