HTTP 协议 服务区发送数据给客户端可以 GZIP 压缩 那么反过来也可以? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ranran
V2EX    问与答

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

  •  1
     
  •   ranran 2016-08-20 14:46:25 +08:00 6405 次点击
    这是一个创建于 3357 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是 POST 请求是否也可以采用 gzip 压缩,然后服务器自行解压?
    16 条回复    2016-08-22 14:44:03 +08:00
    ranran
        1
    ranran  
    OP
       2016-08-20 14:47:27 +08:00
    一般服务器不支持吧?只能自行实现?
    skydiver
        2
    skydiver  
       2016-08-20 14:58:54 +08:00 via iPad   1
    为什么不可以呢,以及为什么不试一下呢
    ranran
        3
    ranran  
    OP
       2016-08-20 15:12:48 +08:00
    @skydiver 记得 post 文件的时候 都是 base64 编码 base64 会让内容变长好多 我突然很疑惑 为什么不用 gzip 这样的压缩算法呢

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

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

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

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

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

    =>

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

    https://imququ.com/post/how-to-compress-http-request-body.html
    如何压缩 HTTP 请求正文
    qgy18
        10
    qgy18  
       2016-08-20 16:05:34 +08:00   1
    aprikyblue
        11
    aprikyblue  
       2016-08-20 16:19:56 +08:00 via Android   1
    @Zzzzzzzzz 按照最后这样逻辑的话,服务器也可以用简单的结构构造出一个压缩后极小但是解压后极大的数据来爆访问者内存?
    laoyur
        12
    laoyur  
       2016-08-20 16:45:23 +08:00   1
    如果服务端和客户端都是你做的,那你非要这么做当然可以,但是,一般的情况下服务端不是你控制的,
    你都不知道服务端支持不支持 gzip ,就直接传了压缩过的数据过去,让人家怎么处理?
    还有就是 4 楼提到的安全问题,如果服务端接受压缩过的数据,客户端扔一个 zip 炸弹上来,解压出来几十 G ,服务器处理不好的话岂不嗝儿屁
    julyclyde
        13
    julyclyde  
       2016-08-21 20:39:17 +08:00
    @fcicq HTTP 没这个传统。砍掉高位的那是传说中的古代 SMTP
    fcicq
        14
    fcicq  
       2016-08-21 21:52:11 +08:00
    @julyclyde 不过想一下在 UTF-8 以前也没啥压缩, 文本内容砍了高位根本没事. FTP 还分 text 和 binary...
    sivacohan
        15
    sivacohan  
    PRO
       2016-08-21 23:07:51 +08:00 via Android   3
    @aprikyblue 你说的对,有一个反扒技术就是这样。利用 gzip 压缩一个 TB 级别的都是 0 的文件。目前浏览器对这种情况有拦截,不会出大问题。但一般爬虫不考虑这个,直接把磁盘爆掉。
    Zzzzzzzzz
        16
    Zzzzzzzzz  
       2016-08-22 14:44:03 +08:00   2
    @aprikyblue 有啊, gzip bomb, 但最多让浏览器崩一下, 主要用途倒是像楼上说的,对二三线爬虫有奇效.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3093 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:33 PVG 08:33 LAX 17:33 JFK 20:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86