Android4.0でのブラウザバックでキャッシュ指定が有効とならない

2,213 views
Skip to first unread message

tatsuya tanaka

unread,
Dec 3, 2012, 9:22:47 PM12/3/12
to android-...@googlegroups.com
no-cache設定を行っていない状態で Android4.0.3とAndroid2.3.3、IE8でブラウザバックしたときの
動作が異なるのですが原因がわからず困っています。
 
OK: Android2.3.3:ブラウザバックしてもサーバにリクエストが飛ばない
OK: IE8         :ブラウザバックしてもサーバにリクエストが飛ばない
 
NG:Android4.0.3:ブラウザバックしたときにサーバにリクエストが飛ぶ
※この事象は以下の環境、バージョンでも発生しています。
 シミュレータ(SDK4.0.3)/実機(4.04)で再現
回避方法等について教えて下さい。よろしくお願いします。

Keiji Ariyama

unread,
Dec 4, 2012, 1:56:46 AM12/4/12
to android-...@googlegroups.com
有山と申します。

 「no-cache設定を行っていない状態」とありますが、Cache-Controlヘッダ自
体はあるのでしょうか。
 その他、どのようなヘッダを付けていますか?

 また、現象を確認したのはAndroidのブラウザは標準ブラウザ上でしょうか。
 Chromeなどでも再現しますか?

 もう少し詳しく教えていただけると、何か力になれるかもしれません。
--
Keiji,
ml_an...@c-lis.co.jp

tatsuya tanaka

unread,
Dec 4, 2012, 6:21:54 AM12/4/12
to android-...@googlegroups.com
有山さま
 
田中です。返信ありがとうございます。
 
Cache-Controlヘッダはあり、「max-age=0」が設定されています。
SDK2.3ではCache-Controlヘッダ自体存在しませんでした。
 
その他に関連しそうなヘッダとしては
Connection:keep-aliveが存在します。(SDK2.3.3、SDK4.0.3共に存在)
 
問題の現象を確認したのは以下の2つです。
SDK4.0.3
携帯(Android4.04)に搭載された標準のブラウザ
 
既存のアプリケーションであり、これまでの古いSDKおよび実機では問題は
発生していませんでした。
 
Chromeでは再現確認しておりません。(事情により勝手には導入できないので)
 
ちなみに(別のアプリケーションですが)no-cache指定を行った場合
SDK2.3.3
cache-control:no-store
pragma:no-cache
 
SDK4.0.3
cache-control:max-age=0
 
となっていることを確認しています。
 
以上です。よろしくお願いします。

Keiji Ariyama

unread,
Dec 4, 2012, 9:46:30 AM12/4/12
to android-...@googlegroups.com
田中さま

 有山です。ちょっと確認させてください。

>> Cache-Controlヘッダはあり、「max-age=0」が設定されています。
>> SDK2.3ではCache-Controlヘッダ自体存在しませんでした。
 これって、WEBサーバーが応答する際のHTTPヘッダ中に、Cache-Controlヘッダ
が含まれているという理解で良かったですか?

 だとすると、サーバーの応答のヘッダは(サーバー側で分岐していない限り)
共通であり、Androidのバージョン毎に異なるヘッダが観察されるというのに違
和感があるのですけど。。。理解が不足していて申し訳ないです。

 あと、max-age=0だと、キャッシュの有効期限が0秒ということだと理解してい
ますので、実質キャッシュとしての効力を発揮していないのではないでしょうか。

RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1
14.9.3 Modifications of the Basic Expiration Mechanism
http://tools.ietf.org/html/rfc2616#section-14.9.3

>> ちなみに(別のアプリケーションですが)no-cache指定を行った場合
>> SDK2.3.3
>> cache-control:no-store
>> pragma:no-cache
>>
>> SDK4.0.3
>> cache-control:max-age=0
 こちらについても、no-cache指定はサーバー側の応答ヘッダに含めたのでしょ
うか。これらの値の確認は、どのように(サーバーの応答を観察 or Android
WebView等のAPIを通じて確認)したのでしょうか。

 宜しくお願いいたします。

(12/4/12 8:21 PM), tatsuya tanaka wrote:
> 有山さま
>
> 田中です。返信ありがとうございます。
>
>
> その他に関連しそうなヘッダとしては
> Connection:keep-aliveが存在します。(SDK2.3.3、SDK4.0.3共に存在)
>
> 問題の現象を確認したのは以下の2つです。
> SDK4.0.3
> 携帯(Android4.04)に搭載された標準のブラウザ
>
> 既存のアプリケーションであり、これまでの古いSDKおよび実機では問題は
> 発生していませんでした。
>
> Chromeでは再現確認しておりません。(事情により勝手には導入できないので)
>
> ちなみに(別のアプリケーションですが)no-cache指定を行った場合
> SDK2.3.3
> cache-control:no-store
> pragma:no-cache
>
> SDK4.0.3
> cache-control:max-age=0
>
> となっていることを確認しています。
>
> 以上です。よろしくお願いします。
>

--
Keiji,
ml_an...@c-lis.co.jp

tatsuya tanaka

unread,
Dec 5, 2012, 2:11:30 AM12/5/12
to android-...@googlegroups.com
有山さま
 
田中です。
HTTPヘッダの件は全てクライアントからWebサーバへのリクエストの事です。
※クライアントの画面はWebサーバから返却されたもので、異なるのはAnroidバージョンのみです。
 
HTTPヘッダのキャプチャはWebサーバの間にあるプロキシのログから取得しました。
 
直接の原因はmax-age=0であろう事は想定できるのですが何故Androidのバージョンによって
HTTPヘッダの内容が異なるのか?回避する方法はあるのか?がわかりません。
 
HTMLの情報も載せる事ができず情報が少ないですが何かヒントになることがあれば教えて下さい。
よろしくお願いします。
 
以上です。

2012年12月4日火曜日 23時46分30秒 UTC+9 C-LIS Keiji Ariyama:

Keiji Ariyama

unread,
Dec 5, 2012, 7:36:43 AM12/5/12
to android-...@googlegroups.com
田中さま

 有山です。こちら側でテストしてみました。

 結果から言うと、Cache-Controlヘッダにmax-age=0が指定されているという現
象は確認できませんでした。

【テスト方法】
 それぞれのバージョンの端末およびEmulatorの標準ブラウザ、またはChrome
で、web-sniffer.netを経由でwww.google.co.jpへアクセス。リクエストおよび
レスポンスのヘッダを確認する

【テスト結果】
●4.0.3(Emulator) Browser
http://i45.tinypic.com/2lw23cg.png

●2.3.3(Emulator) Browser
http://i45.tinypic.com/vobkhk.png

●4.2(Galaxy Nexus) Browser
http://i49.tinypic.com/2iqyis9.png

●4.2(Galaxy Nexus) Chrome
http://i49.tinypic.com/24vpr0g.png

 それぞれのブラウザのリクエストヘッダのCache-Controlは、max-age=0ではな
く、no-cacheが設定されています。
 一方で、レスポンスヘッダにはmax-age=0が設定されていますが、田中さまが
言っているのはこれのことでしょうか。
>> ml_an...@c-lis.co.jp <javascript:>
>>
>

--
Keiji,
ml_an...@c-lis.co.jp

tatsuya tanaka

unread,
Dec 6, 2012, 10:42:19 PM12/6/12
to android-...@googlegroups.com
有山さま
 
田中です。返信が遅れて申し訳ありません。
詳細に調べていただいて恐縮です。
 
今回の問題点は
no-cache指定を行っていない画面遷移においてブラウザバックした場合に
cacheが有効とならず再度リクエストが送出される事です。
 
クライアントへ画面を返しているサーバAPが同一であるのにクライアント側の
Androidバージョンにより挙動が異なっています。
 
有山様の行われたテストの場合ですと画面①へアクセス後、別画面②
へ遷移しブラウザバックにて画面①へ戻る際にcacheで表示されるか
再度リクエストを送信し画面①を要求するかという観点になります。
(なおかつ画面①がcacheされる状態でないといけません)
 
当該画面がcacheの指定かどうかは外からはステータスバーの表示
あるいはサーバが画面を返却する際のCache-Controlヘッダを確認する
しかないかと思います。
 
何か調べるべきポイントがあればご教授をお願いします。
 
以上です。
2012年12月5日水曜日 21時36分43秒 UTC+9 C-LIS Keiji Ariyama:

Keiji Ariyama

unread,
Dec 7, 2012, 3:37:55 AM12/7/12
to android-...@googlegroups.com
田中さま

 有山です。

>> 今回の問題点は
>> no-cache指定を行っていない画面遷移においてブラウザバックした場合に
>> cacheが有効とならず再度リクエストが送出される事です。

 現時点では、Androidのブラウザが、サーバーのレスポンスにあるCache-
Controlヘッダの指定を正常に反映していないのか。
 それとも、サーバー側がUser-Agentで判別して端末や環境によって異なる内容
を送出していて、Androidのブラウザがそれに従っているだけなのか、判別がで
きていません。

 お手数ですが、以下の点について確認をお願いできますか?

確認1.
 「no-cache指定を行っていない」と言うのは、サーバーサイドのCache-
Controlヘッダでしょうか。それともクライアントサイドのCache-Controlヘッダ
でしょうか。
(サーバー側の指定と考えるのが順当ですが、前回、max-age=0が指定されてい
ると言う内容が含まれていたので、再度確認です)

確認2.
 アクセスしているWEBサーバーは、田中さまの管理下にあるのでしょうか。そ
れとも、管理下にないサーバーなのでしょうか。

確認3.
 サーバーのレスポンスヘッダで、Cache-Controlは、具体的にどのように指定
されているのでしょうか。
(前回は、クライアント側のリクエストヘッダしか記載がなかったように思われ
ます)
>> ml_an...@c-lis.co.jp <javascript:>
>>
>

--
Keiji,
ml_an...@c-lis.co.jp

tatsuya tanaka

unread,
Dec 20, 2012, 10:01:04 PM12/20/12
to android-...@googlegroups.com
有山さま
 
田中です。色々バタバタしていて返信が遅れました申し訳ありません。
 
現在、有山さまの指摘する観点も含めて再度詳細なキャプチャを採取
しようとしており、結果がでましたら再度書き込みさせて頂きますので
しばらく時間を下さい。
 
なお確認2については管理下にあるWebサーバです。
 
以上よろしくお願いします。

2012年12月7日金曜日 17時37分55秒 UTC+9 C-LIS Keiji Ariyama:
Reply all
Reply to author
Forward
0 new messages