我想用Javascript将压缩的POST数据发送到我控制的服务器.有没有办法让HTTP层处理压缩.
我正在发送JSON.如果我将内容类型设置为GZIP/deflate,浏览器会自动压缩它,然后Apache使用deflate mod自动解压缩它,这样我的应用程序就不必考虑被压缩的数据了吗?
我知道它可以相反的方式,但任何方式使它以这种方式工作?
rdl*_*rey 71
浏览器会自动为您的数据进行gzip编码吗?最简洁的答案是不.
长期的答案是,一些用户代理可以做这样的事情,但你绝对不能依赖它.apache mod_deflate docs状态:
一些特殊的应用程序实际上支持请求压缩,例如一些WebDAV客户端.
所以,不,那不行.您需要自己生成相应的HTTP请求消息.在这种情况下,适当的标题是,Content-Encoding: gzip而不是Content-Type:因为内容本身application/json,您只是想要编码HTTP请求消息的实体主体进行传输.
请注意,您还需要添加适当的Content-Length:标头,指定压缩后的消息实体主体的大小(以字节为单位) - 或者 - 使用Transfer-Encoding: chunked和放弃内容长度规范发送HTTP消息.
在接收端,您可以 指示mod_deflate使用输入过滤器来解压缩信息:
<Location /dav-area>
SetInputFilter DEFLATE
</Location>
Run Code Online (Sandbox Code Playgroud)
如果您只接收几个资源的压缩消息体,那么这有点沉重.相反,您应该只使用客户端脚本来检查Content-Encoding: gzip标头并手动解压缩请求主体.如何做到这一点,比如PHP,完全是另一个问题.如果您需要详细信息,请发布另一个问题.
这是可能的,但我强烈建议不要接受传入服务器的gzip压缩数据.主要原因是防止您的服务器遭到gzip轰炸.在实际解压缩数据之前,通常无法知道未压缩数据的样子,因此用户可以向您发送看似无害的1 KB或1 MB数据的Web请求,但实际上是100 GB的数据,然后是您的网络服务器(nginx或apache)在接下来的10分钟内挂起,试图将其全部解压缩,最终耗尽内存/锁定.