さて、カレンダーアプリは通常、サーバ上のカレンダーファイル(.ics)を登録・照会すると、一定の間隔でそのファイルにアクセスして更新状況を確認し、適宜情報のアップデートを行います。
サーバのアクセスログを見てみると、
- ★カレンダーアプリが、参照している .ics ファイルにアクセスしたときに、そのファイルが:
- 更新されていれば、サーバはステータスコード 200 (OK) を返して更新されたファイル内容を送信。
- 変更がなければコード 304 (Not Modified) を返してファイル内容は送信しない。
- 削除されていれば「ファイルが無いよ」ということを知らせるためにコード 404 (Not Found) を返す。
…と、まぁ当然の挙動をしているのですが。
で、問題は上記の3番。
サーバ上で、例えば超古い .ics ファイルを削除したとします。超古いにもかかわらず、手許のカレンダーアプリで照会し続けているユーザーさんは存在するはずです、たぶん。
既に存在しない .ics を参照している場合、さて、どうなるか。
確認した限りでは、多くのカレンダーアプリで、照会している .ics ファイルが Not Found であっても、ファイルの存在有無を確かめるために定期的に延々とサーバにアクセスし続けるようなのですね。
なんだかとても無駄なトラフィック。
そこで「もうファイルは無いのですよ。諦めて、アクセスを止めてください」と伝えるにはどうすればよいか。いろいろ試した中では以下がベスト。
具体的には、削除された .ics ファイル(仮に test.ics という名前だとします)が存在したディレクトリの .htaccess に、以下を記述。
こう設定しておけば、test.ics へのアクセスに対して「410 Gone」が返されます。カレンダーアプリ側で、照会しているファイルが「410 Gone(もはや存在しない)」であることが判れば、定期的な参照を即座にストップしてくれるアプリケーションもあります。
例えば Thunderbird は、「410 Gone」というレスポンスが返ってきたら、即座にそのカレンダーは無効化されます。
無効化されているカレンダーは「有効化」ボタンをクリックしない限り、サーバへの問い合わせは行いません。
一方、iOS のカレンダーアプリは、【設定】→【カレンダー】→【アカウント】→【照会したカレンダー】で確認してみると…
サーバから「410 Gone」が返されたカレンダーに対しては、一応「停止中」と表示されます。が、サーバのログを確認してみると、「停止中」となった後も、相変わらずサーバへのアクセスは続いています。アクセス頻度は落ちている気がしなくもないけれど。
う〜ん。
というわけで、iOSのカレンダーアプリに対しては、サーバ側で講じられる手立てはこれ以上もう無さそう。利用者側が『照会したカレンダー』のリストを見て「あ、このカレンダー、停止中になっている。削除しよ」とか思ってくれないと、たぶんアクセスは止まらない。
コメント