【问题标题】:How do I bypass Accept header validation in IIS?如何绕过 IIS 中的 Accept 标头验证?
【发布时间】:2015-11-18 22:22:21
【问题描述】:

我有一个托管在 ASP.Net 上的 Nancy 网站,其中包含许多自定义路由。这些路由包括看起来像文件路径的映射(例如/path/to/xml_file.xml),但会解析为应该在浏览器中显示的 HTML 文件。对于大多数文件,这可以正常工作。但是,对于 XML 文件(可能还有其他 mime 类型),我从 IIS 8 Express 收到 406.0 HTTP 错误,明确指出

HTTP 错误 406.0 - 不可接受

无法显示资源,因为您的浏览器不接受文件扩展名。

请求被拒绝,因为它包含请求的文件扩展名不支持的 MIME 类型的 Accept 标头。

验证请求的文件扩展名的 MIME 设置,以确保此 MIME 类型可接受。

是否有任何 web.config 设置或其他技术可以绕过此验证,以便在无需重写路径逻辑的情况下不会出现此错误?我的谷歌搜索失败了。例如,我发现this IIS forum post链接自SO Answer,其中谈到了

将所有请求映射到 ASP.NET 并使用 ASP.NET 的 StaticFileHandler 为它们提供服务

但是,该帖子没有说明如何执行此操作;似乎也不适用。

编辑:(上面添加了错误页面图片)

作为另一个花絮,Nancy 路由返回表单的显式视图

return View["view_name", myModel];

因此,应该绕过内容协商。

【问题讨论】:

  • 您是否检查过 .xml 是否特定于 IIS 中的 mime 类型?
  • @DinoMyte 正如我们在ourmandave 回答的评论中所指定的,我在web.config 文件中使用了不同的映射,但无济于事。

标签: asp.net iis web-config nancy http-status-code-406


【解决方案1】:

虽然本身不​​是修复或答案,但我目前的工作(对于任何可能感兴趣的人)是调整路线以使用尾部斜杠。举个例子:

"/path/to/xml_file.xml"   //  Still returns a 406.0 error
"/path/to/xml_file.xml/"  //  Works properly (notice the trailing slash)

【讨论】:

    【解决方案2】:

    这是 Rackspace 知识中心的链接,该链接展示了如何更改 web.config 文件中静态内容的 MIME 映射。

    https://www.iis.net/configreference/system.webserver/staticcontent/mimemap

    还有一个来自 MS 的更深入的。

    https://www.iis.net/configreference/system.webserver/staticcontent/mimemap

    它们都以 web.config 文件中的这一节为特色。

    <configuration>
      <system.webServer>
        <staticContent>
          <remove fileExtension=".extension" />
          <mimeMap fileExtension=".extension" mimeType="application/example" />
        </staticContent>
      </system.webServer>
    </configuration>
    

    如果这就是实际解决 406.0 问题的方法...

    【讨论】:

    • 不走运。 &lt;staticContent&gt;&lt;remove fileExtension=".xml"/&gt;&lt;mimeMap fileExtension=".xml" mimeType="text/html"/&gt;&lt;/staticContent&gt; 没有停止错误,我之前的&lt;staticContent&gt;&lt;clear /&gt;&lt;/staticContent&gt; 也没有。
    • @erdomke 你可以试试这个config setting 来阻止 Nancy 处理 .xml 文件。
    • @erdomke (this page)[github.com/NancyFx/Nancy/wiki/View-engines) 的底部也是这句话。 As part of the new [Content Negotiation](https://github.com/NancyFx/Nancy/wiki/Content%20Negotiation) features in 0.12, if Nancy could not find your view, the server will return 406 Not Acceptable instead.也许打开追踪看看它没有找到什么?
    • 感谢您的额外帮助。不幸的是,我认为这两个建议都不是答案。 (1) 实际上,我确实希望 Nancy 处理此请求,并希望绕过 IIS 试图为我做的任何事情。 (2) 我在答案中添加了一个屏幕截图,显示这是一个 IIS 错误而不是 Nancy 错误。我目前也没有使用内容协商。
    猜你喜欢
    • 2017-10-24
    • 2021-02-08
    • 2022-01-09
    • 2011-09-17
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    相关资源
    最近更新 更多