如何使 Apache mod_deflate 和 Transfer-encoding : Chunked 一起工作?

2024-02-21

我正在尝试在我们的网站上使用大管道概念。这意味着尝试以块的形式发送响应,而不是整体发送响应,以便用户感觉该页面很快。我通过在 java 中的响应对象上使用flushBuffer方法成功地做到了这一点。但是现在,当我尝试使用 apache mod_deflate 模块压缩内容时,分块丢失了。

这是 apache 用于压缩内容的配置

**

开始 mod_deflate 配置

DeflateBufferSize 100
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog /var/log/httpd/deflate_log deflate

结束 mod_deflate 配置**

这是apache中打开deflate时的响应头

连接:保持活动状态
内容编码:gzip
内容长度:7916
内容类型:text/html;字符集=UTF-8
日期:2012 年 1 月 27 日星期五 20:11:11 GMT
保持活动:超时=300,最大值=3997
服务器:阿帕奇
变化:接受编码

apache 中关闭 deflate 时的响应头

连接:保持活动状态
内容类型:text/html;字符集=UTF-8
日期:2012 年 1 月 27 日星期五 20:21:14 GMT
保持活动:超时=300,最大值=3997
服务器:Apache/2.2.3(CentOS)
传输编码:分块

正如您在上面 2 个标头中看到的,只有在压缩关闭时分块才起作用。我在互联网上搜索了这方面的内容,人们建议减少压缩缓冲区大小价值。我将值减少到 100 个字节,正如您在我的 apache 配置中看到的那样,但这仍然没有解决问题。 DeflateBufferSize 设置为 100 字节意味着响应在 apache 中缓冲,直到接收到 100 字节,然后对其进行压缩。

我正在查看与旧 apache 1.3 捆绑在一起的 mod_gzip 模块,该模块有一个以下指令,允许对分块内容进行 gzip 压缩。

mod_gzip_dechunk 是

有谁知道与 apache 2.x 捆绑在一起的 mod_deflate 中有这样的指令吗?

或者有人知道如何压缩分块内容吗?


事实上我找到了解决方案。我曾经每次创建一个新的 GZipOutputStream 对象来刷新不同的块。相反,您应该仅创建一个 GZipOutputStream 对象,然后使用该对象来压缩响应的所有块。我还对 GZipOutputStream 进行了包装。这是我通过谷歌搜索得到的包装。

public class GZIPFlushableOutputStream extends GZIPOutputStream {

    public GZIPFlushableOutputStream(final OutputStream out) throws IOException {
        // Using Deflater with nowrap == true will ommit headers and trailers
        super(out);
    }

    private static final byte[] EMPTYBYTEARRAY = new byte[0];

    /**
     * Insure all remaining data will be output.
     */
    public void flush() throws IOException {
        /**
         * Now this is tricky: We force the Deflater to flush its data by
         * switching compression level. As yet, a perplexingly simple workaround
         * for
         * 
         * http://developer.java.sun.com/developer/bugParade/bugs/42557 43.html
         */
        def.setInput(EMPTYBYTEARRAY, 0, 0);

        def.setLevel(Deflater.NO_COMPRESSION);
        deflate();

        def.setLevel(Deflater.DEFAULT_COMPRESSION);
        deflate();

        out.flush();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 Apache mod_deflate 和 Transfer-encoding : Chunked 一起工作? 的相关文章

  • Apache mod_rewrite:在 Windows 计算机上使用 PHP 脚本的 RewriteMap 指令

    这已经让我发疯了 我似乎无法让 RewriteMap 指令适用于 Windows 上的 php 脚本 这是我的 httpd conf 文件中的相关片段
  • 在 Java Web 应用程序中处理 X-FORWARDED-PROTO 标头

    任何人都可以指导我与X 转发 原型 https developer mozilla org en US docs Web HTTP Headers X Forwarded Proto部署到 Apache Tomcat 的 Java Web
  • 用作 MAMP 起始页 URL 的 index.* 文件在哪里?

    我试图了解 MAMP 如何管理 Apache Web 服务器 但我找不到index 用作 MAMP 起始页的文件 虚拟主机配置 httpd vhosts conf 不包括在内并且Applications MAMP htdocs仅包含我自己的
  • Vagrant 的端口转发不起作用[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在最后遇到了一个小问题入门指南vagrant http vagrantup com docs getting started ports html
  • NGINX 与 Tomcat 配置

    我是 Nginx 新手 我需要你的帮助 根据很多论坛我了解到我们所有的静态页面都存储在Nginx中 当有请求到来时 我必须将该请求传递给 tomcat 获取数据 并在 tomcat 生成响应后生成响应 目前 我刚刚做到了 我将请求直接传递给
  • 如何将多个域路由到多个节点应用程序?

    我习惯了典型的 Lamp Web 托管环境 您只需单击 cpanel 中的几个按钮 您的域就会被分区并映射到 htdocs 中的文件夹 我经常使用 Node js 但做同样的事情似乎并不那么简单 如果我有多个节点应用程序 并且我想将doma
  • 如何使用 Apache HttpClient 4 获取文件上传的进度条?

    我有以下用于使用 Apache 的 HTTP Client org apache http client 上传文件的代码 public static void main String args throws Exception String
  • .htaccess 只允许访问包含文件

    我的网站上有各种子文件夹 我希望用户无法通过 URL 访问它们 但同时我的主要 PHP 文件能够包含它们或将它们用作表单或链接上的操作 我尝试使用 htaccess 与
  • 如何将现场 prestashop 站点移至本地主机?

    我在将 PS 1 7 从服务器域传输到本地主机时遇到问题 我已按照 Prestashop 文档中的文件传输的所有步骤进行操作 我执行此步骤 1 将所有 prestashop 文件从服务器下载到我的 mac 并将其放入 mamp htdocs
  • 在 Ubuntu 11 上的 Apache 2 上使用 virtualenv 的多个 Django 应用程序

    我已经使用以下命令成功设置了一个 Django 应用程序virtualenv在 Ubuntu 和 Apache 2 上 使用WSGIPythonHome指令指向我的virtualenv地点 现在我需要创建一个单独的 Django 应用程序
  • Internet Explorer 8 + 放气

    我有一个非常奇怪的问题 我真的希望有人能给出答案 因为我不知道还能去哪里问 我正在用 C 编写一个 cgi 应用程序 它由 Apache 执行并输出 HTML 代码 我自己在 C 应用程序中压缩 HTML 输出 因为我的 Web 主机由于某
  • 请求标头与响应标头

    我正在尝试将图像缓存在网站上 该图像由 PHP 提供服务 其中我使用适当的值设置缓存控制的响应标头 但这不是缓存图像 我认为这可能与具有无缓存缓存控制的请求标头有关 标题如下 响应头 Access Control Allow Origin
  • 将应用程序级别用户名/用户 ID 注入 nginx/Apache 日志

    有没有办法将应用程序级别的用户名或 id 在本例中为 django 用户名或 id 注入 Apache 或 ngnix 日志中 请注意 我不是询问 HTTP 身份验证用户名 我目前正在使用一个简短的自定义中间件将此数据添加到响应标头 如下所
  • Ubuntu 12.04 上的 PHP 从 5.3 升级到 php 5.6

    我正在按照本教程将 php 从版本 5 3 升级到 5 6 http phpave com upgrade php 53 to php 56 on ubuntu 1204 lts http phpave com upgrade php 53
  • 我在 apache 中使用乘客 for Rails 时收到 403 错误

    我已经安装了所需的工具 并遵循了几个教程 试图让乘客做出回应 我可以访问公共文件夹 public 500 html 或 422 hml 中的静态文件 昨天我通过虚拟主机进入 发现一些乘客错误 但一段时间后 托管重新启动了服务 从那时起我就无
  • mod_rewrite 有例外

    为了将我的服务器上的每个请求重定向到我使用的安全连接 RewriteCond SERVER PORT 80 RewriteRule https mywebsite com 1 R L 效果完美 但是我需要两条路径不被重定向 说我什么时候访问
  • 如何使用 gradle 将 org.apache.commons.lang3 添加到 Android Studio

    Due to 这个问题 https stackoverflow com questions 994331 java how to decode html character entities in java like httputility
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • 在 PHP 中设置 HTTP 响应代码(在 Apache 下)

    给出以下两种在 PHP 中设置 HTTP 响应代码的方法 具体来说 在 Apache 下 方法一 http response code 404 方法二 header HTTP 1 0 404 Not Found 我的问题是 除了这个事实之外
  • 间歇性 PHP 抽象类错误

    我已经为此奋斗了一段时间 但无法弄清楚 也许其他人也有 或者 Slim PHP Apache 等这里有更深层次的问题 在正常工作几个小时后 我的 Slim 安装将开始给出所有路线均如此 致命错误 类 Slim Collection 包含 1

随机推荐

  • jQuery height() 在调整大小时不改变

    我以前从未遇到过这个问题 但我似乎找不到解决方案 所以我希望你们能帮助我 jQuery function setTheHeight if main level1 block attention block content length Ge
  • 如何在 Laravel 中返​​回两次?

    在 Laravel 中有一个函数return back 这将使用户返回到上一页 是否有可能return back 在一个函数中多次返回用户两次或多次 我试过 public function return back return back 但
  • 如何将连接用作具有类型的独立对象?

    不工作的代码只是为了说明我想要实现的目标 一些连接文件 import ConnectionManager from typeorm const c new ConnectionManager user ormconfig conf file
  • 使用 spring:message 在 Spring Web 应用程序中定义表单标签属性

    我正在开发一个 Java Spring Web 应用程序 我当前面临的问题是我希望将来自 message resources 的消息显示为 HTML 中的属性
  • 使用winsock发送位图

    如何通过 winsock 发送位图而不将其保存到文件然后发送 如果您知道如何在收到数据后将数据转换回位图 这也会很有帮助 您使用什么编程语言 基本上 您必须将位图数据存储到某种字节缓冲区中 然后通过线路发送字节 并从另一端的字节缓冲区中读回
  • 如何使用 INotifyPropertyChanged 更新数组绑定?

    假设我有一堂课 class Foo public string Bar get public string this int index get 我可以使用 Binding Path Bar 和 Binding Path x 绑定到这两个属
  • 模式匹配instanceof

    我在上遇到了这个令人惊奇的话题https www baeldung com java pattern matching instanceof https www baeldung com java pattern matching inst
  • Ionic2 中的多个 $http 请求

    我想知道是否有多个请求 if my http request 1开始吧 比方说 http request 1结束并尝试打电话 http request 2 我的问题如何创建多个请求 例如 打电话 http request 1 then ht
  • 通用图像加载器重用图像

    使用通用图像加载器 是否可以直接将图像保存到磁盘并在应用程序的不同运行之间重复使用这些图像 I know imageLoader displayImage imageURI itemHolder image options 第二次从缓存中获
  • 无法打开资源文件,pygame 错误:“FileNotFoundError:没有这样的文件或目录。”

    Import pygame pygame init BG pygame image load pycache test bg jpg def DrawGameWin window blit BG 0 0 pygame display upd
  • 浏览器使用 AJAX + setInterval 不断消耗内存

    我需要使用 JavaScript 在给定的时间间隔内更新大量数据 问题是 无论我使用什么 JS 库 甚至是裸机 js 所有浏览器似乎都会在每个 AJAX 请求上分配内存 并且之后无法释放它 这是一个应该重现错误的示例片段
  • 使用 clang 优化编译时出现意外结果

    我在代码中发现了一个错误 该错误仅在启用编译器优化 O1 或更高版本时才会发生 我跟踪了该错误 似乎在启用优化时我无法在升压转换范围上使用升压 type erased 适配器 我编写了这个 C 程序来重现它 include
  • 命令行命令中的“$”是什么意思?

    我经常发现命令行命令以美元符号在安装许多东西的说明中 例如安装Ruby in Ubuntu 该网站说使用以下命令 sudo apt get install ruby full 什么是 代表 The 不是命令的一部分 它告诉您该命令需要以普通
  • 在 Ruby on Rails 中使用 mini_magick 将 pdf 转换为 png

    背景 我从 API 调用中检索了二进制形式的 pdf base 64 binary data response label generate label response response shipments response shipme
  • ASP3 和 ASP.NET 会话共享

    有没有办法在 ASP3 和 ASP NET 之间共享会话 Thanks 尽管 Microsoft 尽最大努力使 ASP 和 ASP NET 轻松共存 但有一个领域仍然是一个绊脚石 会话状态 幸运的是 ASP NET 升级的会话状态管理的优点
  • JavaScript 在 Android WebView 中不起作用

    我想通过 webView 加载 url 网址是http wapp baidu com f kw BB F0 BC FD http wapp baidu com f kw BB F0 BC FD 此页面可以在系统默认浏览器上正常工作 但在我的
  • 如何使项目浮动在 Jquery 对话框之外

    我想要一个看起来像这样的对话框 我认为这种方法可行 但我想我错了 JavaScript Creates The Dialog ImageDialogDiv dialog position 98 223 resizable false mod
  • jQuery 提交验证,最后有模式对话框?

    我现在有一个表格想要验证 假设一切都正确 我希望它弹出一个对话框确认其详细信息 这是我迄今为止的代码示例 var userConfirmed false dialog dialog buttons Yes function userConf
  • 如何理解ndarray.reshape函数?

    原型为reshape 就是它reshape shape order C 形状的类型是元组 所以我们应该用以下方式调用这个函数myarray reshape 1000 1 32 32 但是我发现很多人用myarray reshape 1000
  • 如何使 Apache mod_deflate 和 Transfer-encoding : Chunked 一起工作?

    我正在尝试在我们的网站上使用大管道概念 这意味着尝试以块的形式发送响应 而不是整体发送响应 以便用户感觉该页面很快 我通过在 java 中的响应对象上使用flushBuffer方法成功地做到了这一点 但是现在 当我尝试使用 apache m