2017-06-01 82 views
0

随着mod_deflate在我的apache 2.2服务器上正确激活,我想通过curl命令行发送一个gzipped身体。curl命令一个gzipped POST身体到apache服务器

我所看到的所有教程说添加-H'Content编码:gzip”和gzip我的身体文件,但这个失败:

echo '{ "mydummy" : "json" }' > body 
gzip body 
curl -v -i http://localhost/mymodule -H'Content-Encoding: gzip' --data-binary @body.gz 

我的Apache模块接收0字节

而且在如果LogLevel的我的Apache error.log中设置调试,我得到:
[Thu Jun 01 14:29:03 2017] [debug] mod_deflate.c(900): [client 127.0.0.1] Failed to inflate input: cannot handle deflate flags

回答

3

的事情是,mod_deflate模块不喜欢gzip头如下所示:

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,如果采取流,它不会打印标题和Apache将喜欢身体!

echo '{ "mydummy" : "json" }' | gzip > body.gz 
curl -v -i http://localhost/mymodule -H'Content-Encoding: gzip' --data-binary @body.gz 

这个工作,apache模块接收解压缩的字节。

你可以看到这里头的区别,你在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 
+1

使用'--data-binary'可能代替-d'的'做它更安全。 –