代码之家  ›  专栏  ›  技术社区  ›  Vinblad

为什么分块传输编码中的http响应仅适用于某些客户端

  •  3
  • Vinblad  · 技术社区  · 15 年前

    有人能给我解释一下吗?

    很抱歉更新太晚,但问题是用户如何到达服务器的结果。如果用户通过vpn连接连接到本地lan,则将避开代理,否则将使用代理。这导致了两种不同的结果。

    2 回复  |  直到 14 年前
        1
  •  2
  •   RickNZ    15 年前

    如果过早刷新输出流,则服务器端会启用分块编码。是否有任何特定于用户代理的代码可能正在调用Flush()?

        2
  •  1
  •   Piskvor left the building Rohit Kumar    15 年前

    RFC 2616 says

    所有HTTP/1.1应用程序都必须能够接收和解码“分块”传输编码

    Transfer-Encoding: chunked 是为HTTP/1.1定义的。您的一些客户机是否使用HTTP/1.0甚至(shubder)0.9?在这种情况下,服务器不能使用传输编码,因为它不是协议的一部分。

    尽管大多数现代客户机都理解HTTP/1.1,但大多数客户机在使用代理时都可以选择降级到1.0(由于历史原因,一些旧的代理有错误的1.1实现)。因此,尽管浏览器可能理解1.1,但如果有指示,它可以请求1.0。

    示例:MSIE 6+在Internet选项对话框-选项卡中有此选项 Advanced HTTP 1.1 settings -“复选框” Use HTTP 1.1 “和” Use HTTP 1.1 through proxy connections

    此外,并不是所有响应都激活分块编码—通常在未设置内容长度或刷新输出缓冲区时,服务器会将其打开。