2012年9月29日土曜日
2012年9月22日土曜日
iOS6 の safari の ajax POST のキャッシュを検証
iOS 6 Safari caches AJAX POST requests — Daniel15
上の記事などで、iOS6 の safari は ajax の POST リクエストをキャッシュしているという話を読んだので検証してみました。
まずは、以下のようなランダムな色を生成する API を作成。
上の API を、$.get と $.post で取得してみて、
返ってきた色を並べるデモページを作成。
デモページ
結果
確かに、iOS6 の safari は ajax の post をキャッシュしているようでした。
しかも、なぜか、GET リクエストのキャッシュよりも強いポリシーで POST リクエストをキャッシュしている模様。
ちなみに、http ヘッダーで Cache-Control: no-cache を指定すれば、普通にキャッシュしなくなるようでした。
デモページ
その他, 細かい事:
- 全く同じ ajax POST リクエストをし続ける限り、ページをリロードしてもキャッシュを使い続ける。
- GET リクエストが挟まると、POST のキャッシュがリセットされる。(上のデモで POST → GET → POST とやるとキャッシュが使われない)
ということで、とりあえず、POST で叩かれる可能性のある API で、iOS6 の safari をサポートする必要がある場合には、Cache-Control ヘッダーを入れるのがほぼ必須かと思いました。
参考: iOS6 Safari Caching $.ajax Results - Stack Overflow
上の記事などで、iOS6 の safari は ajax の POST リクエストをキャッシュしているという話を読んだので検証してみました。
まずは、以下のようなランダムな色を生成する API を作成。
<?php echo 'hsl(' . rand(0, 360) . ',' . rand(0, 100) . '%, 50%)';
上の API を、$.get と $.post で取得してみて、
返ってきた色を並べるデモページを作成。
デモページ
結果
確かに、iOS6 の safari は ajax の post をキャッシュしているようでした。
しかも、なぜか、GET リクエストのキャッシュよりも強いポリシーで POST リクエストをキャッシュしている模様。
ちなみに、http ヘッダーで Cache-Control: no-cache を指定すれば、普通にキャッシュしなくなるようでした。
デモページ
その他, 細かい事:
- 全く同じ ajax POST リクエストをし続ける限り、ページをリロードしてもキャッシュを使い続ける。
- GET リクエストが挟まると、POST のキャッシュがリセットされる。(上のデモで POST → GET → POST とやるとキャッシュが使われない)
ということで、とりあえず、POST で叩かれる可能性のある API で、iOS6 の safari をサポートする必要がある場合には、Cache-Control ヘッダーを入れるのがほぼ必須かと思いました。
参考: iOS6 Safari Caching $.ajax Results - Stack Overflow
登録:
投稿 (Atom)