我想用javascript发送压缩POST数据到我控制的服务器。 有没有什么办法让HTTP层处理压缩。
我送JSON。 如果我设置的内容类型,以GZIP /放气将浏览器自动压缩,然后跟Apache放气模自动解压缩它,所以我的应用程序不会去想在所有被压缩的数据?
我知道它可以工作的其他方式,但任何办法让它以这种方式工作?
我想用javascript发送压缩POST数据到我控制的服务器。 有没有什么办法让HTTP层处理压缩。
我送JSON。 如果我设置的内容类型,以GZIP /放气将浏览器自动压缩,然后跟Apache放气模自动解压缩它,所以我的应用程序不会去想在所有被压缩的数据?
我知道它可以工作的其他方式,但任何办法让它以这种方式工作?
将浏览器自动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这样做,完全是另外一个问题。 如果你需要,你应该张贴其他问题的细节。
这是可能的,但我反对接受gzip压缩数据传入到您的服务器强烈推荐。 主要的原因是为了防止您的服务器得到的gzip轰炸 。 这是一般不可能知道的未压缩数据的样子其实是解压缩此之前,所以用户可以向您发送Web请求,看起来像一个无害的1 KB或1 MB的数据,但确实是100 GB的数据,并且将您的网络服务器(nginx的或Apache)挂在接下来的10分钟尝试解压缩这一切,最终运行内存/锁起来。
只要达到了这个使用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)));