5

私は現在、iOS と Android 用のハイブリッド モバイル アプリ (phonegap/cordova を参照) を作成していますが、画像の img.src URL を更新するときに (頻繁に行っています)、Android の http 要求が以下のようになっていることに気付きました。

私の問題は、すべての重要な Accept ヘッダー (Accept: / ) が含まれていないため、サーバーが画像の読み込みに失敗して (HTTP/1.1 406 Not Acceptable) を返すことです。Chrome/iOS は、img.src URL を更新するときに、この Accept ヘッダーを http リクエストに含めます。

私の質問は、このヘッダーを追加する方法、または後続の 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
4

1 に答える 1

1

このようなすべての問題の互換性の問題を処理するには、Google の実装を参照してください。これは、PhoneGap と互換性のある Closure Library の内部からのものです (少なくとも彼らは言う:)

基本的に必要なことは、http リクエストのヘッダーを変更することです。ネイティブ xhr オブジェクトには、setRequestHeader(param, value); というメソッドがあります。これはあなたが探していることをします。Android でリモート デバッグを使用して、どのヘッダーがどこに送信されたかを確認します。

どのライブラリを使用しているかわかりません。Google Closure Library を使用すると、リクエスト ヘッダーをオブジェクト パラメータとして xhr インスタンスの send メソッドに渡すことができるので ( SEE THIS )、非常に簡単です。私の知る限り、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 に答える