我目前正在为iOS和Android创建一个混合移动应用程序(请参阅phonegap/cordova),并注意到更新图像的img.src网址(我经常这样做),Android http请求如下所示.
我的问题是它不包括所有重要的Accept标头(Accept:/),因此服务器无法加载图像并返回(HTTP/1.1 406 Not Acceptable).更新img.src网址时,Chrome/iOS会在其http请求中包含此Accept标头.
我的问题是,有没有办法附加这个标题或做一些包含此标题的内容用于后续的img.src更新?
Android 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
Run Code Online (Sandbox Code Playgroud)
看一下Google 的实现来处理所有此类问题的兼容性问题。这是来自 Closure Library 的内部,它与 PhoneGap 兼容(至少他们是这么说的:)
基本上,您需要做的是更改 http 请求的标头。原生 xhr 对象有一个名为 setRequestHeader(param, value) 的方法;这就是你正在寻找的。在 Android 上使用远程调试来查看发送了哪些标头以及发送到何处。
我不知道你用的是什么库。Google Closure 库允许您将请求标头作为对象参数传递给 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); }
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |