压缩HTTP POST数据从浏览器发送(Compressing HTTP Post Data sen

2019-07-02 09:02发布

我想用javascript发送压缩POST数据到我控制的服务器。 有没有什么办法让HTTP层处理压缩。

我送JSON。 如果我设置的内容类型,以GZIP /放气将浏览器自动压缩,然后跟Apache放气模自动解压缩它,所以我的应用程序不会去想在所有被压缩的数据?

我知道它可以工作的其他方式,但任何办法让它以这种方式工作?

Answer 1:

将浏览器自动GZIP编码您的数据吗? 最简洁的答案是不。

长的答复是,一些用户代理可以做这样的事情,但你绝对不能依赖它。 apache的mod_deflate模块文档状态:

一些特殊的应用程序实际上做支持请求压缩,比如一些WebDAV客户端。

所以,不,那是行不通的。 你需要自己生成相应的HTTP请求消息。 在这种情况下,适当的标题是Content-Encoding: gzip和NOT Content-Type:因为内容本身application/json ,你只是希望你的HTTP请求消息的实体主体编码进行运输。

请注意,您还需要添加相应Content-Length:头部指定大小的消息实体主体的字节压缩后-或-使用您发送HTTP消息Transfer-Encoding: chunked和放弃的内容长度规范。

在接收端,您可以 指示mod_deflate使用的输入滤波器来解压缩的信息:

<Location /dav-area>
SetInputFilter DEFLATE
</Location>

这是一个有点沉重交给如果你只接收压缩消息体的一对夫妇的资源。 相反,你应该只使用客户端脚本来检查Content-Encoding: gzip头和手动解压缩请求体。 如何说,PHP这样做,完全是另外一个问题。 如果你需要,你应该张贴其他问题的细节。



Answer 2:

这是可能的,但我反对接受gzip压缩数据传入到您的服务器强烈推荐。 主要的原因是为了防止您的服务器得到的gzip轰炸 。 这是一般不可能知道的未压缩数据的样子其实是解压缩此之前,所以用户可以向您发送Web请求,看起来像一个无害的1 KB或1 MB的数据,但确实是100 GB的数据,并且将您的网络服务器(nginx的或Apache)挂在接下来的10分钟尝试解压缩这一切,最终运行内存/锁起来。



Answer 3:

只要达到了这个使用https://github.com/dankogai/js-deflate然而POSTDATA不管出于什么原因将去掉+号,并用空格代替它们。

要通过JavaScript发送数据:

params.mapdata=  btoa(RawDeflate.deflate(JSON.stringify(mapdata)));

要接收通过PHP的数据:

$value = gzinflate(base64_decode(preg_replace('/\s/', '+',$value)));


文章来源: Compressing HTTP Post Data sent from browser
标签: http gzip