修复 IIS 中 Chrome 的内容处理逗号问题



Chrome 从版本 16 开始对具有不带引号的 content-disposition 标头变得非常严格。虽然网络上的大多数网站将面临用户修复其服务器的压力,但对于没有人愿意接触的小型或内部内部网应用程序来说,这并不容易。

Chrome论坛上关于该问题的帖子,哪些有效,哪些无效。

简短的回答是,如果包含Content-Disposition标头,则需要在文件名中没有逗号或将文件名引号引号。

我们有一个这样的系统来处理文档管理,触摸代码库不是一种选择,但任何名称中带有逗号的文件都会在 Chrome 中抛出错误。 我该如何解决这个问题?

做一点危险! 这里的事情,但对我的答案不是 100% 有信心,并希望评论/替代方案

您可以使用IIS的URL重写模块来执行此操作,该模块也可以处理标头。

关键是匹配包含文件名=并且文件名没有引号的Content-Disposition

<system.webServer>
    <rewrite>
        <outboundRules>
            <rule name="Chrome Comma Fix">
                <match serverVariable="RESPONSE_Content_Disposition" pattern="^(.*)(filename=)(?!&quot;)([^&quot;]*)(;.*)?$" />
                <action type="Rewrite" value="{R:1}{R:2}&quot;{R:3}&quot;{R:4}" />
            </rule>
        </outboundRules>
    </rewrite>
</system.webServer>

不过我还没有测试过这个。