この記事は ビジネスエンジニアリング株式会社(B-EN-G)アドベントカレンダー2023 の記事です。
【トラブル対応日誌より】 では、私が対応したトラブル対応の中から、難易度が高かったものを紹介していこうと思います。
前提知識
Webのキャッシュの仕組みの一つとして Last-ModifiedとIf-Modified-Since を使うものがあります。仕組みの詳細は、こちら をご覧ください。
今回のトラブル内容
私は、オンプレミス環境で動く Webアプリを開発しています。
とある導入先で「ある画面の表示が遅い」という相談を受けて調査しました。
この導入先では、お客様が Web Server を用意し SSL 対応をしていました。
導入先の構成
調査したところ Last-Modified と If-Modified-Since を活用したキャッシュが効いて欲しいところでキャッシュが効かず、画面の描画が遅くなっていることが原因でした。1
Web Server を抜いた構成や、違うブラウザで調べてみたところ以下のような結果になりました。
実験した構成 | キャッシュ | |
---|---|---|
1 | Google Chrome <--https--> Web Server <--http--> My Web App | 効かない(問題) |
2 | Mozilla Firefox <--https--> Web Server <--http--> My Web App | 効く(想定どおり) |
3 | Google Chrome <--http--> My Web App | 効く(想定どおり) |
原因
原因は、 Web Server に設定されていた SSL証明書が無効なものだったためでした。
Google Chrome で 無効な SSL 証明書または自己署名 SSL 証明書を使用しているサーバーに https 経由でサイトにアクセスした場合はキャッシュが効きません。
chromium プロジェクトで issue は上がっているのですが won't fix (対応しない) で close になっています。
https://bugs.chromium.org/p/chromium/issues/detail?id=110649#c8
対応
証明書を正しいものに変更していただくことで解決となりました。
SSL証明書の状態がキャッシュに影響を与える可能性は、考慮していなかったため、その問題を解決するまでには非常に苦労しました。
まとめ
Google Chrome では 無効な SSL 証明書または自己署名 SSL 証明書を使用している場合は、キャッシュが効かない。
余談
キャッシュが効いているかどうかは、ブラウザのデベロッパーツールを使って実施しました。
その際に「キャッシュの無効化」のオプションがオンになっているのに気づかず、調査してしまいました。
その結果、当初のお客様環境でもキャッシュが効いているケースも「キャッシュが効いていない」と見誤り、調査が迷走しました。気を付けよう。
-
ブラウザのデベロッパーツールで確認しました。Last-ModifiedとIf-Modified-Sinceを活用したキャッシュの仕組みが発動するとサーバーからのレスポンスが http status 304 Not Modified になり、Response のコンテンツが空になります(キャッシュが発動していないときは http status 200 ok で Response にコンテンツがある)。 ↩