当ブログはGAEベースで構築しているので、サイトの画像ファイルは、Google Cloud Storage(以下GCS)に格納しています。
GCS格納オブジェクトのデフォルトキャッシュ有効期間が1時間(3600秒)について、以前から何とかしたいなーと思っていたので、今回対応する事にしました。
GCSのキャッシュ保存先
GCSのキャッシュデータはエッジキャッシュに保存されます。
エッジキャッシュとは??
Google利用しているキャッシュサーバーをGCPユーザーも相乗りで利用する機能。Googleが管理しているリソースなので利用者側でキャッシュクリアが明示的に行えないなど、制約があります。
GCSのキャッシュ有効期限を変更
長期間有効にすると何かと面倒だなと思い、キャッシュ有効期間を1ヶ月(2,592,000秒)にしようと思います。
設定する場所はGCSオブジェクトのメタデータになりますが、Cloud Consoleからでは1オブジェクトずつしか設定変更できません。
数が多いので、Cloud SDKでコマンドで一括設定することにしました。
※コマンドを実行するアカウントに、対象バケットのストレージ編集者またはストレージ管理者のIAMロールが付与されている必要があります。
gsutil setmeta -r -h 'Cache-Control:public, max-age=2592000' gs://【バゲット名】
変更結果の確認
任意のページを読み込ませたあと、curlコマンドでファイルにアクセスし、レスポンスヘッダを見てみます。
curlコマンド
curl -v https://storage.googleapis.com/【バゲット名】/【ファイル名】 | grep -i cache
返ってきたレスポンスヘッダの内容
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200
< x-guploader-uploadid: AAANsUkF-h51ZOcYM1-ltmehqCU75KQ-jXVWDBKhv2nWvNhFk7wjKGhhRoz8j2hac6wlQBrjSEJPWW_xreSpMrvH79jIhRNY0g
< date: Tue, 04 Aug 2020 04:41:48 GMT
< cache-control: public, max-age=2592000
< expires: Wed, 04 Aug 2021 04:41:48 GMT
< last-modified: Sat, 01 Aug 2020 09:29:36 GMT
< etag: "3e81bd47f5db179a95fbfeb924cd6db2"
< x-goog-generation: 1596274176083515
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 30946
< content-type: image/jpeg
< x-goog-hash: crc32c=YL6kvQ==
< x-goog-hash: md5=PoG9R/XbF5qV+/65JM1tsg==
< x-goog-storage-class: STANDARD
< accept-ranges: bytes
< content-length: 30946
< server: UploadServer
< alt-svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
cache-control: public, max-age=2592000で返ってきました。
まとめ
画像ファイル読込は多少改善されると思います。
が、Cloud CDNにキャッシュできたらより便利です。
何か方法は無いかな?とあれこれ調べています。