【问题标题】:Which function to deflate a http request?哪个函数可以缩小 http 请求?
【发布时间】:2017-02-20 13:42:04
【问题描述】:

我向远程服务发出 HTTP POST 请求,该请求要求将帖子正文“放气”(Content-encoding: deflate 应在标头中发送)。据我了解,这在RFC 1950 中有介绍。我应该使用哪个php函数来兼容?

  • gzencode
  • gzdeflate
  • gzcompress

【问题讨论】:

  • 你想要gzdeflate()。从名字上看是不是很明显?如果没有,文档也会这么说。
  • @Barmar:gzdeflate 的字符串在他们这边不起作用,这就是我问的原因。
  • 您需要出示您的代码。
  • 您使用请求标头所说的在接受编码标头中使用的任何解压缩。
  • @Barmar:我可以接受讽刺的言论,除非他们同时是无知的。正确答案如下。

标签: php http gzip zlib


【解决方案1】:

Content-Encoding: deflate 要求提供数据using the zlib structure (defined in RFC 1950), with the deflate compression algorithm (defined in RFC 1951)

考虑

<?php
    $str = 'test';

    $defl = gzdeflate($str);
    echo bin2hex($defl), "\n";

    $comp = gzcompress($str);
    echo bin2hex($comp), "\n";
?>

这给了我们:

2b492d2e0100
789c2b492d2e0100045d01c1

所以gzcompress 结果是gzdeflate'd 缓冲区,前面是789c,这似乎是一个有效的zlib 标头

0111     |  1000       |  11100   |  0        |  10
CINFO    |  CM         |  FCHECK  |  FDICT    |  FLEVEL
7=32bit  |  8=deflate  |          |  no dict  |  2=default algo

后跟 4 个字节的校验和。这就是我们正在寻找的。​​p>

总结一下,

  • gzdeflate 返回一个原始的压缩缓冲区 (RFC 1951)
  • gzcompress 返回一个封装在 zlib 内容 (RFC 1950) 中的压缩缓冲区
  • Content-Encoding: deflate 需要一个封装的缓冲区,即在发送压缩数据时使用gzcompress

注意令人困惑的命名:gzdeflatenotContent-Encoding: deflategzcompressnotContent-Encoding: compress。去搞清楚!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2019-06-21
    • 2019-04-11
    相关资源
    最近更新 更多