HTTP 协议 服务区发送数据给客户端可以 GZIP 压缩 那么反过来也可以?

2016-08-20 14:46:25 +08:00
 ranran
就是 POST 请求是否也可以采用 gzip 压缩,然后服务器自行解压?
5831 次点击
所在节点    问与答
16 条回复
ranran
2016-08-20 14:47:27 +08:00
一般服务器不支持吧?只能自行实现?
skydiver
2016-08-20 14:58:54 +08:00
为什么不可以呢,以及为什么不试一下呢
ranran
2016-08-20 15:12:48 +08:00
@skydiver 记得 post 文件的时候 都是 base64 编码 base64 会让内容变长好多 我突然很疑惑 为什么不用 gzip 这样的压缩算法呢

我说的场景是基于浏览器的 而不是自己写程序纯传输用 如果纯传输用 自行拓展一下也是毫无疑问的不是么……

老的 HTTP 协议那时候可能没考虑压缩…… 不知道 HTTP2 有没有相关的,毕竟 HTTP2 不是老协议了。

@qgy18 来来来聊聊
Zzzzzzzzz
2016-08-20 15:29:05 +08:00
post 数据只是做 url 编码, 并不会 gzip, 而且上传数据(multipart/form-data)连 url 编码都不会做.

如果 post 的数据不大, 或者上传的是图片或者压缩文件一类, 这类情况 gzip 不仅不会压小, 还可能会变大,

客户端是不可信任的, 理论上可以用简单的结构构造出一个压缩后极小但是解压后极大的数据来爆服务器内存.
Zzzzzzzzz
2016-08-20 15:29:28 +08:00
"post 数据只是做 url 编码, 并不会 gzip, 而且上传数据(multipart/form-data)连 url 编码都不会做. "

=>

"post 数据只是做 url 编码, 并不会 base64, 而且上传数据(multipart/form-data)连 url 编码都不会做. "
vibbow
2016-08-20 15:45:53 +08:00
post 数据可以压缩的
vibbow
2016-08-20 15:47:45 +08:00
关键字:
Content-Encoding: gzip
fcicq
2016-08-20 15:50:19 +08:00
传统上某些 8-bit byte 会被砍掉首位所以只能传输 7-bit byte. url encode 和 base64 都能完成这个变换. 但是指定 content-type 为一种私有或者二进制类型很不好看, 推荐用 multipart 上传的方式, 稍微浪费一个头的空间还不算太离谱.
qgy18
2016-08-20 16:00:36 +08:00
当然可以!而且我以前就写过相关文章:

https://imququ.com/post/how-to-compress-http-request-body.html
如何压缩 HTTP 请求正文
qgy18
2016-08-20 16:05:34 +08:00
aprikyblue
2016-08-20 16:19:56 +08:00
@Zzzzzzzzz 按照最后这样逻辑的话,服务器也可以用简单的结构构造出一个压缩后极小但是解压后极大的数据来爆访问者内存?
laoyur
2016-08-20 16:45:23 +08:00
如果服务端和客户端都是你做的,那你非要这么做当然可以,但是,一般的情况下服务端不是你控制的,
你都不知道服务端支持不支持 gzip ,就直接传了压缩过的数据过去,让人家怎么处理?
还有就是 4 楼提到的安全问题,如果服务端接受压缩过的数据,客户端扔一个 zip 炸弹上来,解压出来几十 G ,服务器处理不好的话岂不嗝儿屁
julyclyde
2016-08-21 20:39:17 +08:00
@fcicq HTTP 没这个传统。砍掉高位的那是传说中的古代 SMTP
fcicq
2016-08-21 21:52:11 +08:00
@julyclyde 不过想一下在 UTF-8 以前也没啥压缩, 文本内容砍了高位根本没事. FTP 还分 text 和 binary...
sivacohan
2016-08-21 23:07:51 +08:00
@aprikyblue 你说的对,有一个反扒技术就是这样。利用 gzip 压缩一个 TB 级别的都是 0 的文件。目前浏览器对这种情况有拦截,不会出大问题。但一般爬虫不考虑这个,直接把磁盘爆掉。
Zzzzzzzzz
2016-08-22 14:44:03 +08:00
@aprikyblue 有啊, gzip bomb, 但最多让浏览器崩一下, 主要用途倒是像楼上说的,对二三线爬虫有奇效.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/300621

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX