Android web browserは非同期POST(Ajax POST)もキャッシュされる場合がある
前回のエントリで記載した問題が解消しました。再現コードはこちら(説明はIssue7519)で、原因は以下のとおりでした。
- IEではXMLHttpRequestのGETがキャッシュされるため、回避策としてPOSTを利用する、というものがあるが、Android1.6 web browserではPOSTもキャッシュされる場合がある。
- jQuery.ajaxの引数”cache”は、GETの場合にしか挙動が変わらない。(jQuery 1.4.1。なお上記再現コードは1.3.1ですが同様です。)
まず前者については、前回説明した通りです。サーバロード、メモリロードの状態では非同期リクエストはキャッシュされないのですが、キャッシュロードの状態では一度行ったリクエストは再度サーバへリクエストすることはありません。GETもPOSTも同様です。
GETの場合はIEと同様ダミーGETパラメータを追加することでユニークなURLを生成しキャッシュを回避できます。POST場合は…すみません、jQuery.ajaxでPOSTパラメータの設定方法が分からないので未検証です。
次に後者について。まだ他人のjavascriptを見てどのような挙動になるのか理解するレベルには達していないので、WireSharkを使ってパケットを見てみました。POSTのときはcacheがtrueだろうがfalseだろうが同じリクエストが行われていました。
以上より、jQuery.ajaxをGETにしてなおかつcache:falseを設定することで、キャッシュロードの状態でも非同期リクエストが行えるようになりました。本来POSTであるべきところもGETにしてしまうのは気持ち悪いですが…
また、cache:falseを多用するとAndroid上でのページの読み込みが目に見えて遅くなったような。ページキャッシュのドロップ(ブラウザを開くとホームページ(google.com)に戻ってしまう)も頻発しているような。う~ん。
なお、Grails(gsp)でremoteLinkタグを使用すると、デフォルトではPOSTリクエストになりますし、GETに変えてもパラメータをユニークにする必要がありますので、素直にjQueryを直で使用した方が良いような気がします。
« Android web browserのajax(asynchronous request)の挙動が変だ | トップページ | coroid ver.0.3.1 トランスコード状況の表示 »
この記事へのコメントは終了しました。
トラックバック
この記事へのトラックバック一覧です: Android web browserは非同期POST(Ajax POST)もキャッシュされる場合がある:
» Google Chromeも非同期GETがキャッシュされる(特定条件下で) [雪羽の発火後忘失]
前回、Android1.6のブラウザで非同期GET/POSTがキャッシュされる、ということを書きました。 この際、PCのブラウザではどのような挙動になっているのか気になったので調べてみました。試したページは前回と同じこちら。 PCでのキャッシュロードは、一旦上記ページを開いた後、別のページに飛んで、その後ブラウザの”戻る”ボタンで戻ってから再度実行しました。 色んなサイトでIEはXMLHttpRe... [続きを読む]
» Android標準Webブラウザではオレオレ証明書HTTPSでストリーミング再生できない/HTTPSでダウンロードできない [雪羽の発火後忘失]
前者について。 ストリーミング再生可能な動画ファイルをHTTPS接続先に置いて、Webブラウザでリンクをクリックするとストリーミング再生が始まることを期待していたのですが、DownloadManagerが立ち上がりダウンロードが開始されてしまいました。あれ?と思いHTTPで接続してみると、正しく再生が始まりました。 ストリーミング再生するか、ダウンロードするかの判断はBrowserActivity... [続きを読む]
« Android web browserのajax(asynchronous request)の挙動が変だ | トップページ | coroid ver.0.3.1 トランスコード状況の表示 »
コメント