jQuery是否可以强制使用gzip/deflate压缩方式进行URL的AJAX调用?

22

我有一个Web服务,可以输出压缩的数据,已经通过使用wget和curl验证该服务可以响应原始JSON或gzip的JSON。

我想使用jQuery AJAX调用来消费这个Web服务。

默认情况下,jQuery提供的$.ajax调用不会添加必要的"Accept-Encoding: gzip" HTTP请求头,以便Web服务器响应gzip数据。

但是,当我使用jQuery自己的方法来添加标头时,例如:

$.ajax({url: 'http://foo.com/service.json',
        beforeSend: function(xhr) { 
            console.log('xhr set'); 
            xhr.setRequestHeader('Accept-Encoding', 'deflate') 
       } 
});

那么浏览器控制台将会显示以下错误信息:

Refused to set unsafe header "Accept-Encoding"

可以强制jQuery为启用gzip/deflate的URL进行AJAX调用吗?

如果不行,那是jQuery的缺陷,还是AJAX的更深层次问题?


1
我认为浏览器决定是否接受gzip/deflate。“伪造”可能会导致数据损坏。 - jwueller
1个回答

41

浏览器会自动添加适当的accept-encoding头信息,包括XHR请求。你不需要在DOM/JS层面进行添加。


谢谢,你说得对!我应该更仔细地检查我的服务器日志。 - Lee
这对于HTML5混合应用程序也是真的吗?在移动设备上,在webview容器中运行...? - demaniak
@demaniak: 应该是的。您在特定的 Webview 中看到了不同的行为吗? - Dave Ward
@DaveWard - 我怀疑我正在处理的 Android 4.3 webview(在定制设备上)可能没有添加 Accept-Encoding 标头。不过,我会先尝试验证一下 ;) 除了 Weinre 之外,还有什么提示可以检查发生了什么?假设我无法访问后端服务器以检查那里的传入请求。 - demaniak
@demaniak:我可能会通过在本地机器上使用Fiddler(或Mac上的Charles)代理Android设备(例如http://encosia.com/using-an-iphone-with-the-visual-studio-development-server/),以检查真实的流量。 - Dave Ward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接