【问题标题】:How Can I have IIS properly serve .webmanifest files on my web site?如何让 IIS 在我的网站上正确提供 .webmanifest 文件?
【发布时间】:2018-09-09 00:34:42
【问题描述】:

Favicon Generator 组装了一个供网站管理员使用的软件包,以便为许多不同的设备提供可用的图标。该页面带有一个名为site.manifest 的文件,该文件通过网页文档<head> 中的以下标记链接到:

<link rel="manifest" href="site.webmanifest">

根据Mozilla“Web 应用程序清单在 JSON 文本文件中提供有关应用程序的信息(例如名称、作者、图标和描述)。清单的目的是安装 Web 应用程序到设备的主屏幕,为用户提供更快的访问和更丰富的体验。”

很遗憾,如果您使用的是 Microsoft 的 Internet 信息服务 (IIS),如果您尝试访问 site.webmanifest 文件,则会收到 404.3 错误。

确切的错误消息如下:“由于扩展​​配置,无法提供您请求的页面。如果页面是脚本,请添加处理程序。如果应该下载文件,请添加 MIME地图。”

如何在 IIS 中正确地提供 site.webmanifest 文件?

【问题讨论】:

    标签: iis web-manifest


    【解决方案1】:

    默认情况下,IIS 不提供在其 (IIS) 核心设置中没有与之关联的 MIME 映射的任何文件。

    要应对这一挑战,您需要将 .webmanifest 文件扩展名映射到其适当的 MIME 类型。

    为此,请打开 IIS 并按照以下步骤操作;

    1. 在左侧,在“连接”菜单中选择您的网站或整个服务器。 如果您选择服务器,您的 MIME 映射将应用于服务器上的每个网站。 如果您选择一个网站,它将仅适用于单个网站。

    2. 接下来,从 IIS 菜单中选择“MIME 类型”:

    1. 在那里,点击右侧菜单中的“添加...”。

    2. 在打开的对话框中,在 MIME 类型框中的文件扩展名框中指定 .webmanifest application/manifest+json

    1. 点击“确定”。

    恭喜;您刚刚在 IIS 上为 .webmanifest 定义了 MIME 类型。

    【讨论】:

    • ...有关.webmanifest文件扩展名MIME type可用here的更多详细信息
    • 我这样做了,它破坏了该服务器上所有站点上的所有.js 文件(出于某种原因,服务器开始将它们作为html 而不是text/javascript 提供服务)。为什么会发生这种情况?在 IIS 中删除 .webmanifest mime 类型后,网站恢复正常。
    • 有趣的是,我像解释的那样添加它,但它很快就消失了,我又得到一个 403,再次添加它,工作一段时间然后它又消失了,等等。
    • 为这个问题道歉,但我已经定义了 .manifest,默认情况下我假设为application/x-ms/manifest。我可以改变这个定义吗?请注意,如果我确实更改它,它仍然会给出 OP 发布的错误
    • @nathanjw,此主题适用于 .webmanifest 文件。 .manifest.webmanifest 不一样。希望这可以帮助。 :)
    【解决方案2】:

    对于 Azure,我将其添加为 web.config

    <?xml version="1.0"?>
    
    <configuration>
        <system.webServer>
            <staticContent>
                <mimeMap fileExtension=".json" mimeType="application/json" />
                <mimeMap fileExtension=".webmanifest" mimeType="application/manifest+json" />
            </staticContent>
        </system.webServer>
    </configuration> 
    

    【讨论】:

    • 谢谢!这也修复了使用 IIS Express 进行的调试。
    • 这是更好的答案,因为我无权在服务器上设置 mime 类型。
    • 非常感谢,我为此苦思了两天多。在此之后,它真的很顺利地解决了我的两个问题:离线缓存和安装网络应用程序功能。
    • 如果 json 已经是有效的 mime 类型,请删除 json 映射以防止 IIS 上出现错误。换句话说,删除这一行:&lt;mimeMap fileExtension=".json" mimeType="application/json" /&gt;
    【解决方案3】:

    对于那些使用 ASP.NET Core(我使用的是 2.1)的用户,您可以根据 static files 文档配置可在应用程序 Startup.cs 文件中提供的 MIME 类型:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
        provider.Mappings[".webmanifest"] = "application/manifest+json";
    
        app.UseStaticFiles(new StaticFileOptions()
        {
            ContentTypeProvider = provider
        });
    
        app.UseMvc();
    }
    

    【讨论】:

    • +1 这也适用于 Kestrel,即不在 IIS 上运行项目,但在 launchSetting.json 中使用本地配置文件时
    • 如果您已经通过 app.UseStaticFiles() 使用静态文件,请确保调用 both UseStaticFiles() 和 UseStaticFiles(new StaticFileOptions()...) 否则您的所有其他文件都将停止提供服务。
    • 请注意,需要手动添加到 .NET core 3.1。在 .NET Core 5.0 中,它已包含在默认提供程序映射中,尝试手动添加它会导致异常,因为它已经存在。
    【解决方案4】:

    更简单的解决方案是将清单文件重命名为 site.webmanifest.json 并链接为

     <link rel="manifest" href="site.webmanifest.json">
    

    IIS 应该已经有 .json 文件的 MIME 类型 如果部署到不容易更改 IIS 设置的 Azure,这也很有帮助。

    【讨论】:

    • 我同意将文件重命名为 *.json 最初对我来说是最有意义的。特别是因为该文件确实是 JSON 数据。但是,在我的问题起源的以下线程中有一些强烈反对这样做:github.com/RealFaviconGenerator/realfavicongenerator/issues/372
    • 根据当前的 W3C 工作草案,这些文件必须命名为 .webmanifest。是的,目前浏览器正在使用 .json,但他们可以根据规范随意更改它,然后它会破坏你的 PWA。
    【解决方案5】:

    添加到@Ben 的answer:如果您有 SPA,您应该将 StaticFileOptions 代码放入 UseSpaStaticFiles() 调用中:

    FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
    provider.Mappings[".webmanifest"] = "application/manifest+json";
    
    app.UseSpaStaticFiles(new StaticFileOptions()
    {
        ContentTypeProvider = provider
    });
    

    【讨论】:

      【解决方案6】:

      我发现 IIS 服务器在请求过滤功能中列出了“.json”,表明它是不允许的。

      删除允许提供文件的文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        相关资源
        最近更新 更多