それはCuteKeのウェブサイトはちょうど進水した私のウェブサイトを訪問するために10秒程度かかりました。私は最初の各ページに(不要なリソースファイルを変更してもちろん、これは、耐えられないheader
と不要なファイルfooter
でFragment
真ん中必要ありません)。約5秒節約できましたが、それでも機能しません。最適化も可能です。CDNも最適化できます。この章では、CDNの概念とSpringSecurityでのキャッシュのサポート方法を紹介します。
1.CDNの概念
1.1使用シナリオ
まず、Alibaba CloudCDNによって提供されるアプリケーションシナリオを見てみましょう。
-
Webサイト/アプリケーションの静的アクセラレーション:サイトまたはアプリケーション内の多数の静的リソースの分散を加速します。サイトコンテンツを動的および静的から分離し、Alibaba CloudCDNを使用して静的コンテンツを高速化することをお勧めします。動的コンテンツはクラウドサーバーECSを使用でき、さまざまな種類の画像、css、jsの小さなファイルなどの静的リソースが私たちが焦点を当てているコンテンツです。アーキテクチャ図は次のとおりです。
-
ビデオとオーディオのオンデマンド/ラージファイルのダウンロード:さまざまなファイルのダウンロードと配布をサポートし、mp4、flvビデオファイル、または平均単一ファイルサイズが2,000万を超えるオンラインオンデマンドアクセラレーションサービスをサポートします。主なビジネスシナリオは、ビデオとオーディオのオンデマンドとラージファイルのダウンロードです。 (インストールパッケージのダウンロードなど)など。
-
ライブブロードキャストアクセラレーション:最先端のコンテンツアクセスとCDNネットワーク、および大規模な分散リアルタイムトランスコーディングテクノロジーに基づくオーディオおよびビデオライブブロードキャストプラットフォームにより、便利なアクセス、高解像度のスムーズ、低遅延、高同時実行のオーディオおよびビデオライブブロードキャストサービスを提供します。複数のライブブロードキャストシーン、パノラマデータ統計、および豊富な角度分析、豊富なライブブロードキャスト機能、記録と再生、リアルタイムカバー、リアルタイムトランスコーディング、および混合ストリーミングをサポートします。
-
モバイルアプリケーションの高速化:モバイルAPP更新ファイル(apkファイル)の配布、モバイルAPPでの写真、ページ、短いビデオ、UGCおよびその他のコンテンツの最適化および高速化された配布。httpDNSサービスを提供し、DNSハイジャックを回避し、リアルタイムで正確なDNS解決結果を取得し、ユーザーアクセス時間を効果的に短縮し、ユーザーエクスペリエンスを向上させます。
-
その他のCDN製品
最後に、使用されるHTTP要求処理フローチャートを示します。
ここでは最初のシナリオのみを使用しているので、ここにアーキテクチャ図を示します。他のシナリオのアーキテクチャ図は、リファレンス1で確認できます。
1.2いくつかの重要な用語
- DNS:ドメインネームシステム、ドメイン名解決サービス、誰もが知っていると思うので、ここでは紹介しません
- CNAMEレコード:ドメイン名を別のドメイン名に解決するために使用できるDNS解決レコードの一種。DNSシステムがCNAMEの左側の名前を照会すると、CNAMEの右側の名前に変わり、照会を実行して、最後までトレースします。 PTRまたはA名は、クエリが成功した後にのみ応答します。それ以外の場合は失敗します。たとえば、サーバーに大量のデータが保存されている場合
docs.example.com
、これらのリソースにアクセスするために使用しますが、これらのリソースにdocuments.example.com
もアクセスできるようにしたい場合は、CNAMEレコードをDNS解決サービスプロバイダーに追加し、documents.example.com
ポイントしdocs.example.com
、追加します。 CNAMEレコードの後、すべてのアクセスdocuments.example.com
要求が転送されdocs.example.com
、同じコンテンツが取得されます。-
Qiniu CloudはOSSサービスを提供し、10 GBの無料ストレージを提供します。通常、OSSはCDNによって最適化されます
-
Qiniu Cloudのドメイン名の解決レコードを見てみましょう。digを使用して、以下を表示します。
-
CNAMEは解決中に他の多くのドメイン名に到達し、最終的に2つのIPに解決されたことがわかります。これは、おそらく私に近いエッジノードです。
-
- エッジノード:エッジノードは、ネットワークの複雑な構造に関して提案された概念であり、エンドユーザーのアクセスからの中間リンクが少なく、エンドユーザーへの応答機能と接続速度が優れているネットワークノードを指します。その機能は、最も訪問されたWebページのコンテンツとオブジェクトをサーバーのフロントエンドにある専用のキャッシュデバイスに保存して、Webサイトへのアクセスの速度と品質を向上させることです。
- Back-to-originホスト:Back-to-originホスト:Back-to-originホストは、back-to-originリクエストがオリジンサイトの特定のサイトにアクセスすることを決定します。
2.HTTPサポート
フロントエンドキャッシュは、主にブラウザキャッシュとcdnキャッシュに分けられます。これらのキャッシュの制御は、いくつかのHTTPヘッダーによって制御されます。
-
キャッシュコントロール:規定のフィールドはたくさんあります。リクエストフィールドとレスポンスフィールドの意味については、関連資料を参照するか、リファレンス4を参照してください。QiniuCloudOSSに保存され、CDNによって最適化され、ブラウザで分析された画像を見てみましょう。処理する:
-
図に示すように、ブラウザが最初にアクセスすると、200ステータスコードが返され、max-age = 31536000(1年)が返されます。
-
ブラウザが2回目にアクセスすると、304ステータスコードが返され、max-ageは同じです。
-
-
最終変更日:サーバーがファイルを最後に変更した日付。
max-age
+Last-Modfied
時刻が現在の時刻よりも短い場合、サーバーは再要求します。 -
If-Modified-Since:この時点で変更されているかどうかを確認します。変更されていない場合は、304ステータスコードを返します。
HTTPSは当面調査されていませんが、HTTPに似ているはずですが、暗号化と復号化のレイヤーがあります
3. SpringSecurityのサポート
OSSサーバーはそれ自体でキャッシングをサポートしますが、私のCuteKeWebサイトはSpringSecurityを使用しているので、SpringSecurityがキャッシングをサポートしているかどうかを見てみましょう。公式声明:過去のSpring Securityでは、Webアプリケーションに独自のキャッシュ制御を提供する必要がありました。これは当時は合理的と思われましたが、ブラウザのキャッシュは安全な接続用のキャッシュも含むように進化しました。これは、ユーザーが認証されたページを表示してログアウトすると、悪意のあるユーザーがブラウザの履歴を使用してキャッシュされたページを表示できます。この問題を軽減するために、Spring Securityは、次のヘッダーを応答に挿入するキャッシュ制御サポートを追加しました。
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
大まかに言うと、キャッシュが正しくないと、ユーザーは許可なくファイルを参照するため、セキュリティのために、SpringSecurityはデフォルトでキャッシュなしを使用します。したがって、このデフォルト構成では、ファイルをキャッシュできるように変更する必要があるため、プロジェクトのapplication.propertiesに次の行を追加します。
# http 缓存过期时间
spring.resources.cachePeriod=31536000
そうです、それはとても簡単です。SpringBootを使用すると、はるかに少ないコードを記述できます。より複雑な他の方法については、リファレンス6を参照してください。
4.CDNの実践
サーバーを構成したら、次のステップはAlibaba CloudでのCDN構成です。ここでは詳しく説明しません。AlibabaCloudのチュートリアルを参照できます。効果を見てみましょう。
-
ドメイン名の解決を表示する:
www.cuteke.cn
CNAMEレコードがあり、それを指していることがわかりますwww.cuteke.cn.w.kunlunar.com
-
CuteKeホームページの応答時間:わずか801ms、23333に来る
-
キャッシュ制御がオンになっています:
5.OSSリフレッシュキャッシュ方式
OSSにアップロードするファイルが更新された場合は、キャッシュを更新する必要があります。ここでは、QiniuCloudを例として取り上げます。キャッシュを更新する方法は2つあります。
- キャッシュ更新リクエストを積極的に送信する
- ランダムなURLパラメータを実行して更新
特定の手順は参考文献7を読む
6.参考文献
[1] AlibabaCloud-CDN使用シナリオドキュメント
[2] AlibabaCloud-CDN用語説明
[3]変質した静的リソースキャッシュと更新
[4]ブラウザとCDNキャッシュ
[5] SpringSecurity公式ドキュメントキャッシュ制御
[6]詳細Springシリーズの静的リソース処理
[7] QiniuCloud-キャッシュの更新方法