• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mod_deflate

    描述:在将内容传递给 client 之前压缩内容
    状态:延期
    模块标识符:deflate_module
    源文件:mod_deflate.c

    摘要

    mod_deflate模块提供DEFLATE输出过滤器,允许服务器的输出在通过网络发送到 client 之前进行压缩。

    支持的编码

    gzip编码是唯一支持以确保与旧浏览器 implementation 完全兼容的编码。不支持deflate编码,请查看zlib 的文档以获取完整说明。

    Sample 配置

    压缩和 TLS

    当 TLS 连接携带压缩数据时,某些 web applications 容易受到信息泄露攻击。有关更多信息,请查看“BREACH”攻击系列的详细信息。

    这是一个简单的 configuration 压缩 common text-based 内容类型。

    仅压缩几种类型

    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
    

    启用压缩

    压缩和 TLS

    当 TLS 连接携带压缩数据时,某些 web applications 容易受到信息泄露攻击。有关更多信息,请查看“BREACH”攻击系列的详细信息。

    输出压缩

    压缩由DEFLATE过滤实现。以下指令将为容器中的文档启用压缩:

    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI ".(?:gif|jpe?g|png)$" no-gzip
    

    如果要将压缩限制为特定的 MIME 类型,则可以使用AddOutputFilterByType指令。以下是仅为 Apache 文档的 html files 启用压缩的示例:

    <Directory "/your-server-root/manual">
        AddOutputFilterByType DEFLATE text/html
    </Directory>
    

    注意

    始终在诸如 PHP 或 SSI 之类的 RESOURCE 过滤器之后插入DEFLATE过滤器。它从不接触内部子请求。

    注意

    有一个环境变量force-gzip,通过SETENV设置,它将忽略浏览器的 accept-encoding 设置并发送压缩输出。

    输出解压缩

    mod_deflate模块还为 inflating/uncompressing gzip 压缩响应体提供过滤器。在 order 中激活此 feature,您必须使用SetOutputFilter或AddOutputFilter将INFLATE过滤器插入到输出过滤器链中,对于 example:

    <Location "/dav-area">
        ProxyPass "http://example.com/"
        SetOutputFilter INFLATE
    </Location>
    

    此 Example 将从 example.com 解压缩 gzip 的输出,因此其他过滤器可以使用它进行进一步处理。

    输入解压缩

    mod_deflate模块还提供了一个用于解压缩 gzip 压缩请求体的过滤器。在 order 中激活此 feature,您必须使用SetInputFilter或AddInputFilter将DEFLATE过滤器插入到输入过滤器链中,对于 example:

    <Location "/dav-area">
        SetInputFilter DEFLATE
    </Location>
    

    现在,如果请求包含Content-Encoding: gzip标头,则会自动解压缩主体。很少有浏览器能够 gzip 请求正文。但是,一些特殊的 applications 实际上支持请求压缩,例如一些WebDAV clients。

    关于 Content-Length 的说明

    如果您自己评估请求体,请不要相信Content-Length标头! Content-Length 标头反映了来自 client 的传入数据的长度,而不是解压缩数据流的字节数。

    处理代理服务器

    mod_deflate模块发送Vary: Accept-Encoding HTTP 响应头以警告代理,缓存响应应仅发送给发送相应Accept-Encoding请求头的 clients。这可以防止将压缩内容发送到不理解它的客户端。

    如果您使用某些特殊排除项(例如,User-Agent标头),则必须手动配置Vary标头的添加项以警告代理的其他限制。例如,在添加DEFLATE过滤器取决于User-Agent的典型 configuration 中,您应该添加:

    Header append Vary User-Agent
    

    如果您关于压缩的决定取决于请求 headers(e.g. HTTP version)之外的其他信息,则必须将Vary标头设置为 value *。这可以防止兼容代理完全缓存。

    Header set Vary *
    

    提供 pre-compressed 内容

    由于mod_deflate re-compresses 内容在每个 time 时都有一个请求,因此 pre-compressing 内容可以导出一些_性能好处,并告诉mod_deflate在没有 re-compressing 的情况下为它们提供服务。这可以使用如下的 configuration 来完成:

    <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>
    

    DeflateBufferSize 指令

    描述:片段大小由 zlib 在一个 time 压缩
    句法:DeflateBufferSize value
    默认:DeflateBufferSize 8096
    Context:server config,virtual host
    状态:延期
    模块:mod_deflate

    DeflateBufferSize指令指定 zlib 应在一个 time 处压缩的片段的大小(以字节为单位)。如果压缩的响应大小大于此伪指令指定的大小,则 httpd 将切换到分块编码(HTTP 头Transfer-Encoding设置为Chunked),副作用是不设置任何Content-Length HTTP 头。当 httpd 在反向缓存代理后面工作或 httpd 配置为mod_cache和mod_cache_disk时,这一点尤其重要,因为没有任何Content-Length头的 HTTP 响应可能不会被缓存。

    DeflateCompressionLevel 指令

    描述:我们对输出应用了多少压缩
    句法:DeflateCompressionLevel value
    默认:Zlib's default
    Context:server config,virtual host
    状态:延期
    模块:mod_deflate

    DeflateCompressionLevel指令指定应使用 level 压缩,value 越高,压缩越好,但实现此目的所需的 CPU time 时间越长。

    值必须介于 1(压缩少)和 9(压缩更多)之间。

    DeflateFilterNote 指令

    描述:将压缩率放在 logging 的注释中
    句法:DeflateFilterNote[type] notename
    Context:server config,virtual host
    状态:延期
    模块:mod_deflate

    DeflateFilterNote指令指定应将有关压缩率的注释附加到请求。注释的 name 是为指令指定的 value。您可以通过将 value 添加到访问 log来将该注释用于统计目的。

    DeflateFilterNote ratio
    
    LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
    CustomLog "logs/deflate_log" deflate
    

    如果要从日志中提取更准确的值,可以使用 type 参数指定作为 logging 注释的数据类型。类型可以是以下之一:

    • Input在笔记中存储过滤器输入流的字节数。
    • Output
      在笔记中存储过滤器输出流的字节数。
    • Ratio
      在笔记中存储压缩率(output/input * 100)。如果省略 type 参数,则这是默认值。

    因此你可以用这样的方式 log:

    准确 Logging

    DeflateFilterNote Input instream
    DeflateFilterNote Output outstream
    DeflateFilterNote Ratio ratio
    
    LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
    CustomLog "logs/deflate_log" deflate
    

    参见

    • mod_log_config

    DeflateInflateLimitRequestBody 指令

    描述:膨胀的请求主体的最大大小
    句法:DeflateInflateLimitRequestBody value
    默认:None, but LimitRequestBody applies after deflation
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_deflate
    兼容性:2.4.10 及以后

    DeflateInflateLimitRequestBody指令指定膨胀的请求主体的最大大小。如果未设置,LimitRequestBody将应用于膨胀的身体。

    DeflateInflateRatioBurst 指令

    描述:申请机构的通胀率可以超过的最大次数
    句法:DeflateInflateRatioBurst value
    默认:DeflateInflateRatioBurst 3
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_deflate
    兼容性:2.4.10 及以后

    DeflateInflateRatioBurst指令指定在终止请求之前可以越过DeflateInflateRatioLimit的最大次数。

    DeflateInflateRatioLimit 指令

    描述:请求机构的最大通胀率
    句法:DeflateInflateRatioLimit value
    默认:DeflateInflateRatioLimit 200
    Context:server config,virtual host,directory,.htaccess
    状态:延期
    模块:mod_deflate
    兼容性:2.4.10 及以后

    DeflateInflateRatioLimit指令指定膨胀请求正文的缩小与膨胀大小的最大比率。正在流入主体时检查此比率,如果超过DeflateInflateRatioBurst次,则终止请求。

    DeflateMemLevel 指令

    描述:zlib 应该使用多少 memory 进行压缩
    句法:DeflateMemLevel value
    默认:DeflateMemLevel 9
    Context:server config,virtual host
    状态:延期
    模块:mod_deflate

    DeflateMemLevel指令指定 zlib 应该使用多少 memory 进行压缩(值在 1 到 9 之间)。

    DeflateWindowSize 指令

    描述:Zlib 压缩窗口大小
    句法:DeflateWindowSize value
    默认:DeflateWindowSize 15
    Context:server config,virtual host
    状态:延期
    模块:mod_deflate

    DeflateWindowSize指令指定 zlib 压缩窗口大小(值在 1 到 15 之间)。通常,窗口尺寸越大,预期压缩比越高。

    上篇:mod_dbd

    下篇:mod_dialup