AEM 發佈
AEM Publish服務有兩個主要快取層,即AEM as a Cloud Service CDN和AEM Dispatcher。 您可以選擇將客戶管理的CDN放在AEM as a Cloud Service CDN前。 AEM as a Cloud Service CDN提供內容邊緣交付,確保為全球的使用者提供低延遲的體驗。 AEM Dispatcher提供直接在AEM Publish前面的快取,並用於減少AEM Publish本身不必要的負載。
{align="center"}
CDN
AEM as a Cloud Service的CDN快取是由HTTP回應快取標題所控制,其目的在於快取內容以最佳化新鮮度與效能之間的平衡。 CDN位於一般使用者與AEM Dispatcher之間,用於快取儘可能接近一般使用者的內容,以確保高效能體驗。
{align="center"}
設定CDN快取內容的方式僅限於在HTTP回應上設定快取標題。 這些快取標頭通常在使用mod_headers
的AEM Dispatcher vhost設定中設定,但也可以在AEM Publish本身中執行的自訂Java™程式碼中設定。
何時會快取HTTP要求/回應?
AEM as a Cloud Service CDN只會快取HTTP回應,且必須符合下列所有條件:
- HTTP回應狀態為
2xx
或3xx
- HTTP要求方法是
GET
或HEAD
- 至少存在下列其中一個HTTP回應標頭:
Cache-Control
、Surrogate-Control
或Expires
- HTTP回應可以是任何內容型別,包括HTML、JSON、CSS、JS和二進位檔案。
根據預設,AEM Dispatcher未快取的HTTP回應會自動移除任何HTTP回應快取標題,以避免在CDN上快取。 如有必要,可透過Header always set ...
指示詞使用mod_headers
仔細覆寫此行為。
快取的內容?
AEM as a Cloud Service CDN快取下列專案:
- HTTP回應內文
- HTTP回應標題
通常,單一URL的HTTP請求/回應會快取為單一物件。 不過,當HTTP回應上設定Vary
標頭時,CDN可以處理單一URL的多重物件快取。 避免在值沒有嚴格控制之值集的標頭上指定Vary
,因為這會造成許多快取遺漏,降低快取命中率。 若要支援在AEM Dispatcher快取各種請求,請檢閱變體快取檔案。
快取存留期 cdn-cache-life
AEM Publish CDN是以TTL (存留時間)為基礎,這表示快取存留期是由Cache-Control
、Surrogate-Control
或Expires
HTTP回應標頭所決定。 如果專案未設定HTTP回應快取標頭,且符合適用條件,Adobe會將預設快取生命週期設為10分鐘(600秒)。
以下是快取標題如何影響CDN快取壽命:
Cache-Control
HTTP回應標頭會指示網頁瀏覽器和CDN快取回應的時間長度。 該值以秒為單位。 例如,Cache-Control: max-age=3600
告訴網頁瀏覽器快取一小時的回應。 如果Surrogate-Control
HTTP回應標頭也存在,CDN會忽略此值。Surrogate-Control
HTTP回應標頭會指示AEM CDN快取回應的時間長度。 該值以秒為單位。 例如,Surrogate-Control: max-age=3600
會告訴CDN快取一小時的回應。Expires
HTTP回應標頭會指示AEM CDN (和網頁瀏覽器)快取回應有效的時間。 值為日期。 例如,Expires: Sat, 16 Sept 2023 09:00:00 EST
會告訴網頁瀏覽器快取回應,直到指定的日期和時間為止。
當瀏覽器和CDN的快取存留期相同時,請使用Cache-Control
來控制快取存留期。 當網頁瀏覽器在與CDN不同的期間內應該快取回應時使用Surrogate-Control
。
預設快取存留期
如果HTTP回應符合上述限定詞🔗的AEM Dispatcher快取資格,則下列為預設值,除非有自訂組態。
如何自訂快取規則
設定CDN快取內容的方式僅限於在HTTP回應上設定快取標頭。 這些快取標頭通常使用mod_headers
在AEM Dispatcher vhost
設定中設定,但也可以在AEM Publish本身執行的自訂Java™程式碼中設定。
AEM Dispatcher
{align="center"}
何時會快取HTTP要求/回應?
當滿足以下所有條件時,會快取對應HTTP請求的HTTP回應:
-
HTTP要求方法是
GET
或HEAD
HEAD
HTTP要求僅快取HTTP回應標頭。 它們沒有回應內文。
-
HTTP回應狀態為
200
-
HTTP回應不適用於二進位檔案。
-
HTTP要求URL路徑以副檔名結尾,例如:
.html
、.json
、.css
、.js
等。 -
HTTP要求不包含授權,且未由AEM驗證。
-
HTTP要求不包含查詢引數。
- 不過,設定忽略的查詢引數可讓具有忽略的查詢引數的HTTP要求從快取中快取/提供服務。
-
HTTP要求的路徑符合允許Dispatcher規則,但不符合拒絕規則。
-
HTTP回應沒有下列AEM Publish設定的HTTP回應標頭:
no-cache
no-store
must-revalidate
快取的內容?
AEM Dispatcher快取下列專案:
快取存留期
AEM Dispatcher會使用下列方法快取HTTP回應:
預設快取存留期
如果HTTP回應符合上述限定詞🔗的AEM Dispatcher快取資格,則下列為預設值,除非有自訂組態。
如何自訂快取規則
AEM Dispatcher的快取可透過Dispatcher設定設定,包括:
- 快取的內容
- 發佈/取消發佈時快取的哪些部分會失效
- 評估快取時會忽略哪些HTTP要求查詢引數
- 快取哪些HTTP回應標題
- 啟用或停用TTL快取
- …等等
使用mod_headers
設定快取標題vhost
設定不會影響Dispatcher快取(以TTL為基礎),因為這些會在AEM Dispatcher處理回應後新增至HTTP回應。 若要透過HTTP回應標頭影響Dispatcher快取,需要在AEM Publish中執行並設定適當HTTP回應標頭的自訂Java™程式碼。