5

我目前正在为 iOS 和 Android 创建一个混合移动应用程序(请参阅 phonegap/cordova),并在更新图像的 img.src url(我经常这样做)时注意到 Android http 请求如下所示。

我的问题是它不包含所有重要的 Accept 标头(Accept: /),因此服务器无法加载图像并返回(HTTP/1.1 406 Not Acceptable)。Chrome/iOS 在更新 img.src url 时在其 http 请求中包含此 Accept 标头。

我的问题是,有没有办法附加此标头或执行包含此标头以供后续 img.src 更新的操作?

安卓 Http 请求:

GET /system/data/ba9320b8-e093-47a9-8858-c6343febf3ec/frame?t=1339017043002 HTTP/1.1
Host: MyHostName
Connection: keep-alive
User-Agent: Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F)
AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Accept-Encoding: gzip,deflate
Accept-Language: en-US
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Cookie: auth_token=0882f24f-04d7-4f05-9475-cfe2a94af5bf
4

1 回答 1

1

查看Google 实施以处理所有此类问题的兼容性问题。这是来自与PhoneGap兼容的闭包库内部(至少他们是这么说的:)

基本上,您需要做的是更改 http 请求的标头。原生 xhr 对象有一个名为 setRequestHeader(param, value); 的方法;它可以满足您的需求。在 Android 上使用远程调试来查看发送了哪些标头以及发送到何处。

不知道你用的是什么库。Google Closure Library 让您将请求标头作为对象参数传递给 xhr 实例的 send 方法(请参阅),因此非常简单。据我所知,jQuery 也有类似的行为。

$.ajax({
         url: "http://someurl",
         data: { signature: authHeader },
         type: "GET",
         beforeSend: function(xhr){xhr.setRequestHeader('X-Test-Header', 'test-value');}
         success: function() { alert('Success!' + authHeader); }
      });
于 2012-10-21T12:47:34.753 回答