當CDN節點上的緩存過期或者沒有命中緩存時,CDN節點會向源站發起請求來獲取最新內容,源站返回的內容以及相關的HTTP頭部信息就是回源響應頭。您可以通過調整源站回源HTTP響應頭,來設置緩存策略、跨域資源共享等,從而優化網站的加載速度、增強內容安全性、控制資源可訪問性,并提高用戶體驗。
背景信息
HTTP響應頭是HTTP的響應消息頭的組成部分之一,可攜帶特定響應參數信息并傳遞給客戶端。
當CDN節點上沒有緩存用戶請求的內容時,CDN會回源站拉取資源,源站收到CDN的請求后會給出響應。為了便于用戶識別源站的響應信息,您可以配置回源HTTP響應頭功能,改寫用戶源站響應報文中的HTTP Header信息。例如,改寫回源響應頭中Content-Type參數的值,然后再傳遞給客戶端,以確保客戶端解析正常(如果源站返回的Content-Type值有誤,客戶端直接解析將出現亂碼,因此需要在CDN上改寫)。
回源響應指源站收到CDN節點的請求后,返回給CDN節點的HTTP消息。回源HTTP響應頭配置只會影響源站響應給CDN節點的HTTP消息,對于CDN節點直接響應給用戶的HTTP消息不做修改。
不支持對泛域名配置回源HTTP響應頭。
適用場景
以下是一些常見的場景和示例:
內容類型不正確:如果源站返回的內容類型(
Content-Type
)與實際內容不符,客戶端可能會無法正確解析。例如,一個HTML文件被錯誤地標記為純文本。這時可以通過配置回源響應頭來修正。示例:將
Content-Type: text/plain
更改為Content-Type: text/html
。緩存策略控制:如果您需要對CDN緩存策略進行更精細的控制,可以調整源站的回源響應頭中的
Cache-Control
或Expires
字段。這有助于優化內容的更新頻率和緩存命中率。示例:將
Cache-Control: max-age=3600
更改為Cache-Control: max-age=86400
,以延長緩存有效期。CDN的默認緩存規則具體請參見阿里云CDN默認緩存規則及優先級。跨域資源共享(CORS):如果您希望允許其他域名的Web應用訪問CDN上托管的資源,則需要在源站設置
Access-Control-Allow-Origin
和其他相關的CORS頭。這些設置確保在瀏覽器執行跨域請求時,CDN能夠提供適當的響應頭給客戶端,避免CORS錯誤。關于跨域訪問問題,您可以參見配置跨域資源共享。示例:
Access-Control-Allow-Origin: *
:允許所有域名進行跨域資源請求。Access-Control-Allow-Methods: GET, POST, OPTIONS
:指定允許跨域請求的HTTP方法。
壓縮傳輸:如果源站支持壓縮傳輸但沒有啟用,或者使用的壓縮算法不是最有效的,可以通過設置回源響應頭中的
Accept-Encoding
來讓源站使用最優的壓縮方式。示例:將
Accept-Encoding: gzip, deflate
更改為Accept-Encoding: br
,以優先使用Brotli壓縮。關于Brotli壓縮相關內容具體請參見Brotli壓縮。重定向:當源站需要重定向用戶到另一個URL時,回源響應頭可以設置正確的重定向響應頭。關于重定向具體請參見配置回源301/302跟隨。
示例:
Location: https://www.example.com/new-page.html
:通知CDN及用戶瀏覽器新的資源位置,用于301或302重定向。自定義回源行為:在某些情況下,源站可能需要提供一些自定義的頭部信息給客戶端,以實現特定的功能或跟蹤目的,您可以通過配置回源響應頭來添加這些自定義頭部。
注意事項
在添加了多條配置的情況下,配置的執行順序是按配置列表從上到下的順序逐條執行,因此需要注意對名稱相同的“HTTP響應頭”的多個配置操作將會疊加,最終結果可能會與預期不符。例如:
配置1:增加HTTP響應頭:
cache-control: max-age=3600
配置2:增加HTTP響應頭:
cache-control: no-cache
以上兩個配置疊加的結果是配置2最終生效
操作步驟
登錄CDN控制臺。
在左側導航欄,單擊域名管理。
在域名管理頁面,找到目標域名,單擊操作列的管理。
在指定域名的左側導航欄,單擊回源配置。
單擊回源HTTP響應頭頁簽。
單擊添加。
配置回源HTTP響應頭信息。
重要當不同的操作方式同時作用于同一個回源響應頭參數時,會存在操作沖突。此時按照操作類型的優先級來執行,優先級順序為替換>增加>變更和刪除。例如,當增加和刪除操作同時作用于同一個參數時,會先增加再刪除。
增加響應頭參數
配置項
示例
說明
響應頭操作
增加
在回源HTTP請求中增加指定的響應頭參數。
自定義響應頭參數
自定義緩存響應頭
選擇自定義緩存響應頭或選擇已經預設好的響應頭參數。
自定義響應頭名稱
x-code
自定義響應頭名稱為x-code。
響應頭值
key1
一個響應頭參數中可以配置多個值,多個值用英文逗號(,)分隔。
key1,key2
是否允許重復
允許
允許:可以添加重復的響應頭參數。例如
x-code:key1
,x-code:key2
。不允許:添加同一個響應頭參數,新值將覆蓋舊值。例如先添加
x-code:key1
,再添加x-code:key2
,最終的值為x-code:key2
。
規則條件
不使用
規則條件能夠對用戶請求中攜帶的各種參數信息進行識別,以此來決定某個配置是否對該請求生效。
不使用:不使用規則條件。
選擇已配置的規則引擎,新增或修改規則引擎請參見規則引擎。
刪除響應頭參數
配置項
示例
說明
響應頭操作
刪除
刪除所有與響應頭參數名稱匹配的參數值,無論是否有重復的響應頭參數。
自定義響應頭參數
自定義緩存響應頭
選擇自定義緩存響應頭或選擇已經預設好的響應頭參數。
自定義響應頭名稱
x-code
自定義響應頭名稱為x-code。
規則條件
不使用
規則條件能夠對用戶請求中攜帶的各種參數信息進行識別,以此來決定某個配置是否對該請求生效。
不使用:不使用規則條件。
選擇已配置的規則引擎,新增或修改規則引擎請參見規則引擎。
變更響應頭參數
配置項
示例
說明
響應頭操作
變更
當響應頭參數不存在重復時,可以正常變更參數,如果有多個重復的響應頭參數,則不允許變更。
自定義響應頭參數
自定義緩存響應頭
選擇自定義緩存響應頭或選擇已經預設好的響應頭參數。
自定義響應頭名稱
x-code
自定義響應頭名稱為x-code。
響應頭變更為
key1,key3
一個響應頭參數中可以配置多個值,多個值用英文逗號(,)分隔。
規則條件
規則條件能夠對用戶請求中攜帶的各種參數信息進行識別,以此來決定某個配置是否對該請求生效。
不使用:不使用規則條件。
選擇已配置的規則引擎,新增或修改規則引擎請參見規則引擎。
替換響應頭參數
配置項
示例
說明
響應頭操作
替換
當響應頭參數不存在重復時,可以正常替換參數,如果有多個重復的響應頭參數,則不允許替換。
自定義響應頭參數
自定義緩存響應頭
選擇自定義緩存響應頭或選擇已經預設好的響應頭參數。
自定義響應頭名稱
x-code
自定義響應頭名稱為x-code。
查找
key
正則表達式查找需要替換的參數值。
替換為
abc
正則表達式替換需要替換的參數值。
匹配
匹配所有
匹配所有:所有匹配上的值都會被替換。例如
x-code:key1,key2,key3
,正則匹配值key替換為abc,替換后的結果為x-code:abc1,abc2,abc3
。僅匹配第一個:只有第一個匹配上的值會被替換。例如
x-code:key1,key2,key3
,正則匹配值key替換為abc,替換后的結果為x-code:abc1,key2,key3
。
規則條件
規則條件能夠對用戶請求中攜帶的各種參數信息進行識別,以此來決定某個配置是否對該請求生效。
不使用:不使用規則條件。
選擇已配置的規則引擎,新增或修改規則引擎請參見規則引擎。
單擊確定。
默認預設響應頭
阿里云CDN默認預設了Cache-Control、Content-Type、Expires、Last-Modified四個回源HTTP響應頭,這四個響應頭是HTTP協議中的重要組成部分,它們分別用于控制緩存、定義內容類型、設置過期時間以及記錄資源的最后修改時間。
CDN默認預設響應頭 | 說明 | 示例 |
Cache-Control | 用于控制資源在CDN緩存中的行為和時間周期的頭信息。它為CDN節點和客戶端瀏覽器提供了緩存指示,例如何時緩存內容、緩存多久,以及緩存的內容何時被認為是過時的。優先級高于舊的 |
|
Content-Type | 描述了返回給客戶端的資源的數據類型。它幫助客戶端正確地解釋和顯示接收到的數據。CDN使用這個頭信息來處理對應的數據類型以及如何傳輸它們。 |
|
Expires | 提供了一個具體的日期/時間,這個時間點之后資源被認為是過期的。CDN使用這個頭來確定資源是否仍然有效,如果過期,CDN將回源請求新的資源。 |
|
Last-Modified | 表示資源最后一次被修改的時間。CDN和瀏覽器使用這個響應頭來判斷自從該資源上次被緩存后是否有被修改過。 |
|
配置示例
示例一:配置響應文檔屬于某種MIME類型
配置場景
如果您希望配置響應文檔屬于某種MIME類型。
MIME類型主要包含以下幾類:
文本類型:包括文本文件(例如.txt、.csv)和HTML文件(例如.html、.htm、.shtml)。
圖片類型:包括常見的圖片文件(例如.jpg、.png、.gif)。
音頻類型:包括音頻文件(例如.mp3、.wav)。
視頻類型:包括視頻文件(例如.mp4、.avi)。
應用程序類型:包括應用程序文件(例如.pdf、.doc、.xls)。
配置方法
響應頭操作:增加
自定義響應頭名稱:Content-Type。
響應頭值:text/html。
結果說明:在源站發送給CDN節點的響應信息中聲明內容類型為text/html,再次配置將覆蓋舊值。
示例二:刪除響應頭信息
配置場景
如果您希望刪除響應頭信息。
配置方法
響應頭操作:刪除
自定義響應頭名稱:Content-Type。
結果說明:刪除請求頭中的Content-Type信息,然后返回給用戶。
如果同時完成了示例一和示例二,那么會先增加響應頭Content-Type信息(響應的內容屬于text/html類型),然后刪除該請求頭,最終結果為:響應的資源沒有MIME類型限制,直接以最初的類型返回用戶。
常見問題
為什么已經配置了響應頭Access-Control-Allow-Origin,但是訪問資源仍提示跨域問題,response header中沒有配置的響應頭?
如果您在阿里云CDN中配置了回源響應頭,如Access-Control-Allow-Origin
等,但是在客戶端訪問資源時遇到跨域問題,并且在響應頭(response header)中沒有看到這些配置的響應頭,可能原因有以下幾點:
可能的原因
配置未生效或錯誤:可能是配置沒有正確設置或尚未生效,導致CDN沒有按照預期返回跨域響應頭。
CDN緩存:CDN節點可能緩存了舊的響應頭信息,這會導致即使您已更改配置,也仍然返回舊的頭信息。
源站問題:如果您在CDN上配置了跨域響應頭,但是源站的響應中也包含了跨域響應頭,并且這些響應頭與CDN的配置沖突,這可能會導致問題。在這種情況下,需要統一CDN和源站的配置。
瀏覽器緩存:瀏覽器可能緩存了舊的響應,導致它并未發起新的請求以獲取更新后的響應頭。
解決方案
驗證配置:確認CDN配置已正確設置并且已經生效,特別是跨域相關的響應頭設置。
清除CDN緩存:您可以使用CDN的刷新功能清空已緩存的內容,然后再次訪問資源。具體請參見刷新和預熱資源。
檢查源站設置:確認源站不會返回與CDN配置沖突的跨域響應頭。建議將源站回源響應頭與節點響應頭中的跨域頭設置為也一致,如果配置不一致,可能會導致沖突。
清除瀏覽器緩存:清空瀏覽器緩存,或使用無痕(隱私)模式測試,確保瀏覽器獲取最新的響應頭。
聯系技術支持:如果您嘗試了上述所有方法,但問題仍然存在,可能是CDN服務方面的問題。請聯系阿里云CDN的技術支持或提交工單尋求幫助。
怎么檢查源站上正確設置了Access-Control-Allow-Origin等響應頭?
如果您的源站為阿里云服務器ECS
您需要確保在ECS上運行的Web服務器或應用程序正確設置了Access-Control-Allow-Origin
以及其他CORS(跨源資源共享)相關的響應頭,可以按照以下步驟進行:
登錄ECS管理控制臺訪問您的ECS實例。
檢查Web服務器跨域配置。
跨域響應頭的配置可能因您使用的Web服務器或應用程序而異。常見的Web服務器有Apache、Nginx等。
Apache
在
.htaccess
文件或服務器配置文件(如httpd.conf
或vhosts.conf
)中查找類似以下內容:Header set Access-Control-Allow-Origin "*"
或者,對于特定的域名:
Header set Access-Control-Allow-Origin "http://example.com"
確認這些配置是否存在,并已經正確設置。
Nginx
在Nginx配置文件(通常是
/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default
)中,找到與您的應用相關的server
塊,并檢查如下設置:location / { add_header 'Access-Control-Allow-Origin' '*'; }
或者,對于特定的域名:
location / { add_header 'Access-Control-Allow-Origin' 'http://example.com'; }
確認這些配置是否存在,并已經正確設置。
重啟Web服務器。
在修改配置文件后,需要重啟Web服務器以使更改生效。例如對于Apache和Nginx,您可以使用以下命令重啟服務器。
對于Apache:
sudo service apache2 restart
對于Nginx:
sudo service nginx restart
瀏覽器驗證響應頭。
使用開發者工具的“網絡”面板訪問您的資源,檢查是否在響應頭中看到
Access-Control-Allow-Origin
。如果看不到,可能是配置沒有生效,或者存在CDN緩存。
如果您的源站為阿里云對象存儲OSS
阿里云OSS支持跨域資源共享(CORS),您可以通過OSS控制臺檢查OSS上是否正確設置了Access-Control-Allow-Origin
等響應頭,可以按照以下步驟進行:
登錄OSS管理控制臺。
單擊Bucket 列表,然后單擊目標Bucket名稱。
在左側導航欄,選擇 。
在跨域規則列表中,檢查規則中是否包含
Access-Control-Allow-Origin
的配置項,并確認其值是否正確。如果您希望允許任何源訪問,
Access-Control-Allow-Origin
應設置為*
。如果您只想允許特定的源訪問,
Access-Control-Allow-Origin
應設置為具體的源地址,如https://yourdomain.com
。
檢查其他相關跨域頭。
除了
Access-Control-Allow-Origin
外,可能還需要檢查以下CORS相關頭部是否已經正確配置:Access-Control-Allow-Methods
:指定允許的HTTP方法,如GET
,POST
,PUT
,DELETE
等。Access-Control-Allow-Headers
:指定允許的自定義請求頭,如果請求中包含了非標準的頭部字段。Access-Control-Max-Age
:指定預檢請求(OPTIONS)的結果能夠被緩存的最大時間。
保存和測試。
如果發現設置不正確或需要更新,按照提示修改相應的值,然后保存更改。保存后,可能需要等待一段時間讓更改生效。
關于OSS跨域配置相關詳細說明,請參見跨域設置。
如果在以上步驟中遇到問題或仍然無法解決問題,請聯系阿里云CDN的技術支持或提交工單尋求幫助。