httpサーバのcache動作を目視確認する


webサーバのキャッシュ動作を確認する。apache,nginxは同じ動作となった。

httpヘッダの技術解説。最近よくアクセスする。
If-Modidied-Since
If-None-Match

キャッシュ動作の基本

初回アクセスで、コンテンツの最終更新日やハッシュ値がレスポンスヘッダで応答される

  • Last-Modified:
  • ETag:

2回目のアクセスで、リクエストヘッダにこの値を設定して自分が持っているキャッシュが最新かどうかを確認する。

  • If-Modified-Since: Last-Modifiedの値
  • If-None-Match: "ETag値"

最新であれば(リクエストヘッダの設定値が妥当であれば)、 304 Not Modified が応答されるので、自分が持っているキャッシュを使う。

動作の目視

curlを使い、リクエストヘッダを指定してレスポンスヘッダを確認する。

結果サマリ

No If-None-Match
ETag
If-Modified-Since
Last-Modified
サーバ応答
1 一致 一致 304 Not Modified
2 一致 指定なし 304 Not Modified
3 指定なし 一致 304 Not Modified
4-1 一致 古い 200 OK
4-2 一致 新しい 304 Not Modified
5 不一致 一致 200 OK

コマンド例

ETag値は"で囲む必要があるので引数自体は'で囲む。
--header 'If-None-Match: "****"'


curl -L $URL -v -o $URL.html 2> $URL.log

(0)初回
URL=(your-url)
curl -L $URL -v -o $URL.html

> GET / HTTP/1.1
> Host: (your-url)
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx
< Date: Sun, 13 Oct 2019 04:56:03 GMT
< Content-Type: text/html
< Content-Length: nnnn
< Connection: keep-alive
< Last-Modified: aaa, DD MMM YYYY hh:mm:ss GMT
< ETag: "****"
< Accept-Ranges: bytes

(1) Etag, If
curl -L $URL -v -o $URL.html --header 'If-None-Match: "****"' --header "If-Modified-Since: aaa, DD MMM YYYY hh:mm:ss GMT" 

(2) Etag
curl -L $URL -v -o $URL.html --header 'If-None-Match: "****"' 

(3) Etag, If
curl -L $URL -v -o $URL.html --header "If-Modified-Since: aaa, DD MMM YYYY hh:mm:ss GMT" 

(4-1) ETag, OLD-DATE
curl -L $URL -v -o $URL.html --header 'If-None-Match: "****"' --header "If-Modified-Since: aaa, DD MMM YYYY hh-:mm:ss GMT" 

(4-2) ETag, NEW-DATE
curl -L $URL -v -o $URL.html --header 'If-None-Match: "****"' --header "If-Modified-Since: aaa, DD MMM YYYY hh+:mm:ss GMT" 

(5) ETag, If
curl -L $URL -v -o $URL.html --header 'If-None-Match: "++++"' --header "If-Modified-Since: aaa, DD MMM YYYY hh:mm:ss GMT"