初回データ取得時
- WWWクラスを使ってデータを取得した時にresponseHeadersにサーバからのレスポンスヘッダが入ってくるので、
ETagやLast-Modifiedを保存しておく(キーは大文字になっている)
2回目以降
- 次回リクエスト時にリクエストヘッダに
ETagやIf-Modified-Sinceに与えてリクエストする
IEnumerator requestSomething(string url) { |
- 変更がなければステータスコードに
304 Not Modifiedが返ってくるので、そうしたらローカルに保存しておいたデータを利用する
ステータスコードの取得
- サーバからのレスポンスが
304かどうかを調べるには: - Unityエディタ上では
www.responseHeaders["STATUS"]でステータスラインが得られるのだが、ビルドしてiOSやAndroidで動かした時に挙動が違って得られない- Androidだと
NULLというキー?で入ってるのだが、iOSだとどこにもない
- Androidだと
Unity Issue Tracker - [WWW] [iOS] [Android] Status and other keys missing from WWW.responseHeaders on mobilewww.errorが空だったら200 OK、そうじゃなかったら先頭3文字がステータスコードだとして整数に変換してしのぐStatus: Not Reproducible、だとぅ?こちとら4.6.6p1で再現済みじゃい
304の場合はerrorが空で返ってくるので、上の方法ではダメだったwww.bytes.Lengthが0なので、それで区別するしかない