gpt4 book ai didi

iis - 在IIS7/8/8.5中指定多个(gzip + brotli)http压缩方案并优先考虑brotli

转载 作者:行者123 更新时间:2023-12-02 07:09:21 25 4
gpt4 key购买 nike

我正在尝试获取新的 Brotli压缩方案在 IIS 中使用“Brotli compression module for Microsoft IIS”,作者:iisspeed.com .

如果我更改<httpCompression>,Brotli 压缩模块本身就可以正常工作。 applicationHost.config 中的配置部分拥有 Brotli 模块。

问题是我想同时拥有 gzip 和 Brotli,并且更喜欢 Brotli

iisspeed.com 上的文档说明要执行此操作:

<httpCompression directory="path\to\temp\folder" minFileSizeForComp="50">
<scheme name="br" dll="path\to\iisbrotli.dll" />
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
...
</httpCompression>

但是我发现这不起作用。

浏览器(本例中为 Chrome)发送以下 accept-encoding标题:

accept-encoding: gzip, deflate, sdch, br

这意味着浏览器可以接受 Brotli 编码 br以及 gzip我希望 IIS 更喜欢 br超过gzip但似乎没有办法对每个 <scheme> 进行优先级排序配置中的元素。我尝试更改 .config 文件中的顺序,但没有效果。

IIS 始终使用 gzip即使br受支持并且是首选,因为它的文件大小较小。

我在 Google 上搜索发现,在 IIS 6 中,每个压缩方案曾经有一个优先级设置,但在 IIS7+ 中似乎已被删除。

它的名字是HcPriority并进入 IIS6 元数据库 XML 文件。

请参阅以下链接:

https://msdn.microsoft.com/en-us/library/ms525366(v=vs.90).aspx

https://blogs.iis.net/ksingla/changes-to-compression-in-iis7

https://forums.iis.net/t/1150520.aspx

我能为 IIS7+ 做些什么来告诉 IIS 更喜欢 br超过gzip如果客户接受?

最佳答案

看来您引用的 Brotli 模块需要付费许可证,所以我还没有尝试过,但我自己的 open source Brotli plugin for IIS 遇到了类似的问题.

正如您所指出的,当前的浏览器在 Accept-Encoding header 中的 gzipdeflate 之后宣传 Brotli 支持。

HTTP RFC没有提供有关如何从具有相同优先级的多个 Accept-Encoding 值中进行选择的具体指导,因此将 br 内容返回给这些客户端是可以接受的。但是,IIS 似乎始终选择与其配置的压缩方案之一匹配的第一个(从左到右)。

如果您希望同时启用这两种方案,则可以在请求进入 IIS 管道时修改请求的 Accept-Encoding header 值。 IIS URL Rewrite Module可以用一个简单的规则来做到这一点。

Accept-Encoding header 由 IIS 管道中的 HTTP_ACCEPT_ENCODING 服务器变量表示,您可以在它到达压缩模块之前对其进行修改。这是一个示例配置:

<rewrite>
<allowedServerVariables>
<add name="HTTP_ACCEPT_ENCODING" />
</allowedServerVariables>
<rules>
<rule name="Prioritize Brotli">
<match url=".*" />
<conditions>
<add input="{HTTP_ACCEPT_ENCODING}" pattern="\bbr(?!;q=0)\b" />
</conditions>
<serverVariables>
<set name="HTTP_ACCEPT_ENCODING" value="br" />
</serverVariables>
</rule>
</rules>
</rewrite>

上面的规则在 Accept-Encoding 中查找字符串 br(被单词边界包围 - 并且后面不紧接着 ;q=0) header 并将其重写为简单的 br,只给 IIS 一种选择。

请注意,默认 URL 重写配置不允许修改 HTTP_ACCEPT_ENCODING 变量。 allowedServerVariables 元素会覆盖该限制,并且必须在 applicationHost.config 中进行配置。然后可以在配置层次结构中的任何级别定义重写规则,尽管将其设为全局可能是有意义的。

关于iis - 在IIS7/8/8.5中指定多个(gzip + brotli)http压缩方案并优先考虑brotli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40156880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com