描述: | 在将内容交付给客户端之前先对其进行压缩 |
---|---|
状态: | 延期 |
模块标识符: | deflate_module |
源文件: | mod_deflate.c |
该mod_deflate
模块提供了DEFLATE
输出过滤器,该过滤器允许您压缩服务器中的输出,然后再通过网络发送给客户端。
当TLS连接携带压缩的压缩数据时,某些Web应用程序容易受到信息泄露攻击。有关更多信息,请查看“ BREACH”攻击家族的详细信息。
这是压缩常见的基于文本的内容类型的简单配置。
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
当TLS连接携带压缩的压缩数据时,某些Web应用程序容易受到信息泄露攻击。有关更多信息,请查看“ BREACH”攻击家族的详细信息。
压缩由DEFLATE
过滤器实现。以下伪指令将对文件所在的容器中的文档启用压缩:
SetOutputFilter DEFLATE SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip
通常,如果要将压缩限制为特定的MIME类型,则可以使用AddOutputFilterByType
指令。这是仅对Apache文档的html文件启用压缩的示例:
<Directory "/your-server-root/manual"> AddOutputFilterByType DEFLATE text/html </Directory>
DEFLATE
过滤器过滤资源,如PHP或SSI之后总是插入。它从不涉及内部子请求。
该mod_deflate
模块还提供了用于对gzip压缩响应主体进行充气/解压缩的过滤器。为了激活此功能,您必须INFLATE
使用SetOutputFilter
或将过滤器插入输出过滤器链AddOutputFilter
,例如:
<Location "/dav-area"> ProxyPass "http://example.com/" SetOutputFilter INFLATE </Location>
本示例将解压缩example.com的gzip输出,因此其他过滤器可以对其进行进一步处理。
该mod_deflate
模块还提供了用于解压缩gzip压缩请求主体的过滤器。为了激活此功能,您必须DEFLATE
使用SetInputFilter
或将过滤器插入输入过滤器链中AddInputFilter
,例如:
<Location "/dav-area"> SetInputFilter DEFLATE </Location>
现在,如果请求包含Content-Encoding:
gzip
标头,则正文将自动解压缩。很少有浏览器能够gzip请求正文。但是,某些特殊应用程序实际上确实支持请求压缩,例如某些WebDAV客户端。
如果您自己评估请求正文,请不要相信Content-Length
标题!
Content-Length标头反映了来自客户端的传入数据的长度,而不是解压缩的数据流的字节数。
该mod_deflate
模块发送Vary:
Accept-Encoding
HTTP响应标头,以警告代理缓存的响应应仅发送给发送适当Accept-Encoding
请求标头的客户端。这样可以防止将压缩的内容发送给无法理解的客户端。
如果您使用某些依赖于User-Agent
标题的特殊排除,则必须手动配置Vary
标题的附加项以向代理警告其他限制。例如,在典型的配置中,DEFLATE
过滤器的User-Agent
添加取决于,您应该添加:
Header append Vary User-Agent
如果关于压缩的决定取决于请求标头(例如 HTTP版本)以外的其他信息,则必须将
Vary
标头设置为value *
。这样可以防止兼容代理完全缓存。
Header set Vary *
由于mod_deflate
每次发出请求时都会重新压缩内容,因此可以通过预压缩内容并告知mod_deflate
服务而不重新压缩内容来获得一些性能优势。可以使用类似以下的配置来完成此操作:
<IfModule mod_headers.c> # Serve gzip compressed CSS and JS files if they exist # and the client accepts gzip. RewriteCond "%{HTTP:Accept-encoding}" "gzip" RewriteCond "%{REQUEST_FILENAME}\.gz" -s RewriteRule "^(.*)\.(css|js)" "$1\.$2\.gz" [QSA] # Serve correct content types, and prevent mod_deflate double gzip. RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1] RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1] <FilesMatch "(\.js\.gz|\.css\.gz)$"> # Serve correct encoding type. Header append Content-Encoding gzip # Force proxies to cache gzipped & # non-gzipped css/js files separately. Header append Vary Accept-Encoding </FilesMatch> </IfModule>
描述: | zlib一次压缩片段大小 |
---|---|
句法: | DeflateBufferSize value |
默认: | DeflateBufferSize 8096 |
内容: | 服务器配置,虚拟主机 |
状态: | 延期 |
模块: | mod_deflate |
该DeflateBufferSize
指令指定zlib一次压缩的片段的大小(以字节为单位)。如果压缩后的响应大小大于此指令指定的大小,则httpd将切换为分块编码(HTTP标头Transfer-Encoding
设置为Chunked
),其副作用是不设置任何Content-Length
HTTP标头。当httpd在反向缓存代理后面工作时,或者当httpd配置有mod_cache
和时,这尤其重要
,mod_cache_disk
因为没有任何Content-Length
标头的HTTP响应可能不会被缓存。
描述: | 我们对输出应用多少压缩 |
---|---|
句法: | DeflateCompressionLevel value |
默认: | Zlib's default |
内容: | 服务器配置,虚拟主机 |
状态: | 延期 |
模块: | mod_deflate |
该DeflateCompressionLevel
指令指定应使用的压缩级别,该值越高,压缩效果越好,但是实现该压缩需要更多的CPU时间。
该值必须介于1(较少压缩)和9(较大压缩)之间。
描述: | 将压缩率放在记录中的注释中 |
---|---|
句法: | DeflateFilterNote [type] notename |
内容: | 服务器配置,虚拟主机 |
状态: | 延期 |
模块: | mod_deflate |
该DeflateFilterNote
指令指定有关压缩率的注释应附加到请求中。注释的名称是为指令指定的值。通过将值添加到访问日志中,可以将该注释用于统计目的。
DeflateFilterNote ratio LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate CustomLog "logs/deflate_log" deflate
如果要从日志中提取更准确的值,则可以使用type参数指定作为日志记录留下的数据类型。类型可以是以下之一:
Input
Output
Ratio
output/input * 100
)存储在注释中。如果省略type参数,则这是默认设置。因此,您可以这样记录它:
DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate CustomLog "logs/deflate_log" deflate
描述: | 膨胀的请求主体的最大大小 |
---|---|
句法: | DeflateInflateLimitRequestBody value |
默认: | None, but LimitRequestBody applies after deflation |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_deflate |
兼容性: | 2.4.10及更高版本 |
该DeflateInflateLimitRequestBody
指令指定的充气请求主体的最大大小。如果未设置,则将其
LimitRequestBody
应用于充气体。
描述: | 可以超过请求主体的通货膨胀率的最大次数 |
---|---|
句法: | DeflateInflateRatioBurst value |
默认: | DeflateInflateRatioBurst 3 |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_deflate |
兼容性: | 2.4.10及更高版本 |
该DeflateInflateRatioBurst
指令指定了DeflateInflateRatioLimit
在终止请求之前可以通过的最大次数
。
描述: | 请求机构的最大通胀率 |
---|---|
句法: | DeflateInflateRatioLimit value |
默认: | DeflateInflateRatioLimit 200 |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
状态: | 延期 |
模块: | mod_deflate |
兼容性: | 2.4.10及更高版本 |
该DeflateInflateRatioLimit
指令指定膨胀的请求主体的压缩大小与膨胀大小的最大比率。在流式处理正文时检查此比率,如果超过
DeflateInflateRatioBurst
多次,则请求将被终止。