【问题标题】:Is it possible to force jQuery to make AJAX calls for URLs with gzip/deflate enabled?是否可以强制 jQuery 对启用了 gzip/deflate 的 URL 进行 AJAX 调用?
【发布时间】:2010-09-23 13:14:48
【问题描述】:

我有一个愿意输出 gzip/压缩数据的网络服务。我已经验证该服务将使用原始 JSON 或使用 wget 和 curl 的 gzip 处理的 JSON 进行响应。

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

默认情况下,jQuery 提供的 $.ajax 调用不会添加 Web 服务器响应 gzip 压缩数据所必需的“Accept-Encoding: gzip”HTTP 请求标头。

但是,当我使用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 更基本的缺点?

【问题讨论】:

  • 我认为浏览器决定它是否接受 gzip/deflate。 “伪造”这可能会导致数据损坏。

标签: jquery ajax web-services gzip deflate


【解决方案1】:

浏览器会根据需要自动添加接受编码标头,包括 XHR 请求。您不需要在 DOM/JS 级别执行此操作。

【讨论】:

  • 谢谢,你是对的!我应该更仔细地检查我的服务器日志。
  • HTML5 混合应用程序也是如此吗?在移动设备上运行,在 webview 容器中......?
  • @demaniak:应该是,是的。您是否在特定的 web 视图中看到了不同的行为?
  • @DaveWard - 我怀疑我正在处理的 Android 4.3 webview(在公认的自定义设备上)可能没有添加 Accept-Encoding 标头。但是,我将首先尝试验证这一点;)除了 Weinre 之外,还有什么提示可以检查引擎盖下发生的事情吗?假设我无法访问后端服务器来检查那里的传入请求。
  • @demaniak:我可能会在我的本地机器(例如encosia.com/…)上通过 Fiddler(或 Mac 上的 Charles)代理 Android 设备以检查真实流量。
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2016-09-24
相关资源
最近更新 更多