スマートフォンアプリ作成

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版

WebView(UIWebView)でhttpキャッシュコントロールを実現する方法

WebView(UIWebView)でhttpキャッシュコントロールを実現する方法

httpという通信プロトコルは通信を円滑に行うための仕組みとして、「キャッシュ」という仕組みをもっている。

ブラウザなどのhttpクライアントが一度受け取ったテキストや画像などのコンテンツを一定期間保持したままにして、その保持期間のあいだはサーバーから取得しないというのがキャッシュ機構である。

httpキャッシュは次の3通りの方法で制御することができる。

それぞれ一長一短があるが、キャッシュ制御定義をきめ細かく設定できるし動作も安定しているため、Apatchなどのサーバー側でhttpキャッシュ制御を行うことをお勧めする。

・ブラウザ、クライアント設定

httpクライアントで設定する場合は、すべてのコンテンツがキャッシュ対象から外れるため、ウェブアプリなどjavaScriptフレームワークを多用するコンテンツの場合には、アクセスのたびに毎回フレームワークをダウンロードし直すことになり、アクセス開始してからコンテンツがロード完了するまでの時間がかかり過ぎる場合がある。

<android>


WebView webView = (WebView)findViewById(R.id.webView);
WebSettings webSet = webView.getSettings();
webSet.setCacheMode(LOAD_NO_CACHE);


<iOS>


[[NSURLCache sharedURLCache] setMemoryCapacity:0];

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    [[NSURLCache sharedURLCache] removeAllCachedResponses];

    if (request.cachePolicy != NSURLRequestReloadIgnoringLocalCacheData) {
        NSMutableURLRequest *urlRequest = (NSMutableURLRequest *)request;
        urlRequest.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
    }
    
    return YES;
}

・Apatchサーバ設定

一番おすすめなのはサーバ側でキャッシュ制御を行うことだ。

httpプロトコルでは、コンテンツをサーバーからクライアントに送信する際にhttpヘッダーにキャッシュ制御を定義することができる。

ファイルタイプごとに定義できるので、javaScriptフレームワークやxxx.jsなどのプログラム部分のみをキャッシュし、更新頻度が高いコンテンツ部分はキャッシュしないように定義することができる。

.htaccessで頻繁に更新されることが想定されるファイルタイプをキャッシュしないように定義する。

<html、画像、CSSファイルをキャッシュ抑制する例>


<Files ~ "\.(html|htm|jpg|jpeg|gif|png|css)>
	Header set Pragma no-cache
	Header set Cache-Control no-cache
</Files>

・htmlコンテンツ設定

htmlのバージョンが改版されるごとに、httpキャッシュに対する定義方法が変わっている。

html5.1からは、htmlでのhttpキャッシュ制御を行う方法は定義されていない。

そもそもコンテンツ本文で通信プロトコルに関する定義を行うことは避けた方が良い。

<html4まで有効だったhttpキャッシュ制御方法>


<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />

html5からmetaタグのhttp-equiv属性の”Cache-Control”が使えなくなった。

<html5で有効だったhttpキャッシュ制御方法>


<xxx.html>
<html lang="ja" manifest=“my.appcache”>

<my.appcache>
CACHE MANIFEST
CACHE:
NETWORK:
\*

html5.1からはhtmlタグのmanifest属性は使えなくなった。

「manifestファイル」でキャッシュコントロールするには正規表現が使えないなど、機能がとても不足していた。

2017年5月
 123456
78910111213
14151617181920
21222324252627
28293031   
android
iOS
アプリの著作権
日本のなりたち

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版
スマートフォンアプリ作成