2017-06-01 39 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'的'做它更安全。 –