在我的 apache 2.2 服务器上正确激活 mod_deflate 后,我尝试通过curl 命令行发送 gzipped 正文。
我见过的所有教程都说添加 -H'Content-Encoding: gzip' 并 gzip 我的正文文件,但是这失败了:
echo '{ "mydummy" : "json" }' > body
gzip body
curl -v -i http://localhost/mymodule -H'Content-Encoding: gzip' --data-binary @body.gz
我的 apache 模块接收到 0 字节
在我的 apache error.log 中,如果 LogLevel 设置为调试,我得到:
[Thu Jun 01 14:29:03 2017] [debug] mod_deflate.c(900): [client 127.0.0.1] 无法膨胀输入:无法处理 deflate 标志
最佳答案
问题是 mod_deflate 不喜欢这里显示的 gzip header :
hexdump -C body.gz
00000000 1f 8b 08 08 20 08 30 59 00 03 62 6f 64 79 00 ab |.... .0Y..body..|
00000010 56 50 ca ad 4c 29 cd cd ad 54 52 b0 52 50 ca 2a |VP..L)...TR.RP.*|
00000020 ce cf 53 52 a8 e5 02 00 a6 6a 24 99 17 00 00 00 |..SR.....j$.....|
00000030
解决方案很简单,将其交给 gzip,无需中间文件步骤,如果采用流,它不会打印 header ,apache 会喜欢正文!
echo '{ "mydummy" : "json" }' | gzip > body.gz
curl -v -i http://localhost/mymodule -H'Content-Encoding: gzip' --data-binary @body.gz
这有效,apache 模块接收解压后的字节。
您可以在这里看到 header 差异,您不再在 gzip 文件中看到文件名(正文):
hexdump -C body.gz
00000000 1f 8b 08 00 08 0a 30 59 00 03 ab 56 50 ca ad 4c |......0Y...VP..L|
00000010 29 cd cd ad 54 52 b0 52 50 ca 2a ce cf 53 52 a8 |)...TR.RP.*..SR.|
00000020 e5 02 00 a6 6a 24 99 17 00 00 00 |....j$.....|
0000002b
关于apache - curl 命令将 gzip 压缩的 POST 正文发送到 apache 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44307771/