全部產品
Search
文件中心

CDN:配置跨域資源共用

更新時間:Sep 10, 2026

當您的業務接入阿里雲CDN後,需要跨域共用或者訪問資源時,您可以通過節點HTTP回應標頭來實現跨域訪問。

什麼是跨域資源共用

跨域資源共用CORS(Cross-Origin Resource Sharing)簡稱跨域訪問,是HTML5提供的標準跨域解決方案,允許網頁從不同源載入和訪問跨域資源,從而實現安全的跨域資料轉送。更多資訊可以參考跨域資源共用。

說明

CDN 預設不開啟跨域資源共用(CORS)。若未配置,瀏覽器因同源策略會攔截跨域請求,即不允許其他網站引用該資源。

為什麼要配置跨域資源共用

由於安全限制,瀏覽器通常會遵循同源策略,限制從不同域、子域、協議或連接埠載入和訪問資源的請求。例如,example.com無法訪問example.org上的資源。通過配置跨域資源共用,可以在CDN伺服器端設定相關的回應標頭。如果請求攜帶了滿足允許規則的要求標頭,則返回對應的HTTP回應標頭部,從而實現跨域資源的載入和訪問。

資料互動示意圖

未開啟跨域共用

開啟跨域共用後

注意事項

  • 若使用OSS作為來源站點,CDN控制台配置的CORS將覆蓋OSS的配置。OSS相關的跨網域設定,請參見跨網域設定。

  • 若使用本機伺服器或ECS執行個體作為來源站點,建議動靜分離,靜態檔案使用CDN加速。CDN控制台配置的CORS功能僅對靜態檔案生效。

開啟跨域資源共用

  1. 登入CDN控制台。

  2. 在左側導覽列,單擊域名管理。

  3. 在網域名稱列表中選擇目標網域名稱,單擊操作列的管理。

  4. 單擊缓存配置,選擇修改出站回應標頭頁簽,設定指定允許的跨域請求的來源和要求方法。

    • 設定跨域請求來源

      單擊添加,按照以下內容設定相關參數,然後單擊確定。

      參數

      說明

      樣本

      响应头操作

      需要設定為增加才能使用跨域驗證功能。

      增加

      自定义响应头参数

      需要設定為Access-Control-Allow-Origin才能使用跨域驗證功能。

      Access-Control-Allow-Origin

      响应头值

      關閉跨域驗證:僅支援設定萬用字元或者單個指定源。

      • 萬用字元 *:使用萬用字元表示允許任何源訪問資源。

      • 單個指定源:指定一個具體的源(網域名稱),表示僅允許該特定源訪問資源。

      開啟跨域驗證:支援設定萬用字元、單個指定源、多個指定源、泛標題來源。

      • 萬用字元 *:使用萬用字元表示允許任何源訪問資源。

      • 單個指定源:指定一個具體的源(網域名稱),表示僅允許該特定源訪問資源。

      • 多個指定源:配置多個具體的源(網域名稱),相互間使用半形逗號,隔開,表示允許該範圍內的源訪問資源。

        重要

        配置多個指定源時,必須使用半形逗號,分隔。若使用分號;分隔,會導致跨網域設定不生效——控制台會顯示配置成功,但 CDN 會將整個分號分隔的字串視為單個來源站點,無法匹配任何單獨的網域名稱請求,CORS 功能不會工作。

      • 泛標題來源:可以配置一個泛網域名稱,表示允許與該泛網域名稱匹配的所有源訪問資源。

      • *

      • http://www.aliyun.com

      • https://aliyun.com,http://www.aliyun.com

      • http://*.aliyun.com

      是否允许重复

      • 允許:即來源站點返回的頭會保留,同時會加上一個同名的頭。

      • 不允許:即來源站點返回的頭會被新配置的同名頭覆蓋。

      重要

      是否允許重複和跨域驗證這兩個配置項之間存在互斥,是否允許重複配置為允許的情況下,跨域驗證將會失效。

      不允许

      跨域驗證

      • 跨域驗證只有在响应头操作為增加,自定义响应头参数為“Access-Control-Allow-Origin”的時候才可以配置。

      • 跨域驗證取值為關閉和開啟,預設為關閉狀態。

        • 關閉狀態下CDN節點不會校正使用者請求中攜帶的Origin頭,只會固定響應已配置的“Access-Control-Allow-Origin”值。

        • 開啟狀態下CDN節點將按以下規則對使用者做跨域校正,並根據校正結果響應“Access-Control-Allow-Origin”的值。跨域校正規則:

          • 任意匹配:自定义响应头参数“Access-Control-Allow-Origin”的值設定為“*”時,不論使用者請求裡面是否攜帶“Origin”參數,也不論攜帶的“Origin”參數為何值,都固定返回“Access-Control-Allow-Origin:*”。

          • 精確匹配:自定义响应头参数“Access-Control-Allow-Origin”的值設定了單個或者多個值(多個值之間用半形逗號“,”分隔)。

            • 如果使用者要求標頭裡攜帶的“Origin”參數值與被設定的任意一個值精確匹配,就會響應對應的跨域頭。

            • 如果都沒有精確匹配上,則不響應跨域頭。

          • 泛網域名稱匹配:自定义响应头参数“Access-Control-Allow-Origin”的值設定了泛網域名稱,則會校正要求標頭中Origin值是否能匹配上“Access-Control-Allow-Origin”的泛網域名稱。

        • 開啟狀態下,如果响应头值中的網域名稱包含短劃線-,需要對短劃線做轉義處理後再配置,將-轉義為%-。例如:

          • 原始回應標頭值:http://doc.aliyun-example.com。

          • 轉義後的回應標頭值:http://doc.aliyun%-example.com。

      開啟

    • 設定跨域要求方法

      單擊添加,按照以下內容設定相關參數,然後單擊確定。

      參數

      說明

      樣本

      响应头操作

      需要設定為增加

      增加

      自定义响应头参数

      需要設定為Access-Control-Allow-Methods

      Access-Control-Allow-Methods

      响应头值

      支援GET、POST、PUT這些要求方法。如果您需要同時添加GET、POST、PUT,請使用半形逗號,隔開。

      GET

      是否允许重复

      • 允許:即來源站點返回的頭會保留,同時會加上一個同名的頭。

      • 不允許:即來源站點返回的頭會被新配置的同名頭覆蓋。

      不允许

配置樣本

樣本一

如果跨域資源共用的回應標頭值設定了單個或者多個值(多個值之間用“,”分隔):

  • 使用者要求標頭中的“Origin”參數值與任意一個設定值精確匹配時,CDN節點響應對應的跨域頭。

  • 如果都沒有精確匹配上,則不響應跨域頭。

在CDN上設定:Access-Control-Allow-Origin:http://example.com,https://aliyundoc.com。

  • 使用者請求攜帶的Origin頭是http://example.com,CDN節點響應Access-Control-Allow-Origin:http://example.com。

  • 使用者請求攜帶的Origin頭是https://aliyundoc.com,CDN節點響應Access-Control-Allow-Origin:https://aliyundoc.com。

  • 使用者請求攜帶的Origin頭是http://aliyundoc.com,CDN節點將不會響應(協議頭不匹配,使用者請求的是HTTP協議,CDN上設定的是HTTPS協議)。

  • 使用者請求攜帶的Origin頭是http://aliyun.com,CDN節點將不會響應(網域名稱不匹配)。

樣本二

如果跨域資源共用的回應標頭值設定了泛網域名稱,則會校正要求標頭中Origin值是否能匹配上Access-Control-Allow-Origin的泛網域名稱。

在CDN上設定:Access-Control-Allow-Origin:http://*.aliyundoc.com。

  • 使用者請求攜帶的Origin頭是http://demo.aliyundoc.com,CDN節點響應Access-Control-Allow-Origin:http://demo.aliyundoc.com。

  • 使用者請求攜帶的Origin頭是http://demo.example.com,CDN節點不會響應(網域名稱不匹配)。

  • 使用者請求攜帶的Origin頭是https://demo.aliyundoc.com,CDN節點不會響應(協議頭不匹配,使用者請求的是HTTPS協議,CDN上設定的是HTTP協議)。

驗證跨網域設定是否生效

  1. 重新整理緩衝:新增的跨域回應標頭對歷史已緩衝的資源不會自動生效,因為 CDN 緩衝的是完整的 HTTP 響應。若要使新配置的 Access-Control-Allow-Origin 生效,需主動重新整理對應資源的 CDN 緩衝。否則使用者仍會收到舊緩衝中不含該頭的響應。

  2. 使用 curl 指定 Origin 頭髮送 GET 請求,通過詳細輸出檢查回應標頭:curl -svo /dev/null https://加速網域名稱/資源路徑 -H 'origin:https://your-site.example.com'

  3. 檢查回應標頭中的 Access-Control-Allow-Origin:值為 * 或與請求的 Origin 匹配 → 配置已生效

使用說明與限制

泛網域名稱配置限制

開啟跨域驗證後,僅支援配置單個泛網域名稱,或者將多個精確網域名稱(非泛網域名稱)用逗號分隔。不支援直接用逗號分隔多個泛網域名稱(如 https://*.example.com,https://*.example.org)。

字型檔與視頻檔案的差異

字型檔(如 .ttf、.woff)無論何種載入方式,瀏覽器一律強制校正 CORS 回應標頭;視頻檔案(如 MP4、WebM)通過 video 標籤載入時預設不受 CORS 限制,除非顯式添加了 crossorigin 屬性。因此即使視頻和字型託管在同一網域名稱下,訪問視頻通常不會報 CORS 錯誤,但字型檔會(這由瀏覽器規範決定)。

CDN 加速 OSS 時的跨網域設定方式

若希望透傳來源站點 OSS 的跨域 CORS 配置,需確保首次訪問請求攜帶 Origin 頭,使 CDN 回源擷取並緩衝 OSS 返回的 Access-Control-Allow-Origin 回應標頭。但緩衝機制可能導致後續不帶 Origin 頭的請求或不同 Origin 的請求出現跨域問題。

推薦做法:直接在 CDN 控制台的緩衝配置中通過修改出站回應標頭添加 CORS 相關回應標頭,而非依賴透傳。

多個 CDN 網域名稱關聯同一 OSS 時,不支援僅在 OSS 配置一次跨域規則使 CDN 自動繼承。由於 CDN 節點會緩衝回應標頭,且緩衝行為受首次請求是否攜帶 Origin 頭影響,必須在每個 CDN 網域名稱的控制台單獨配置跨域規則。

OPTIONS 預檢請求 403 處理

使用 CDN 加速 OSS 時,瀏覽器發送 OPTIONS 預檢請求,CDN 預設返回 403。可以通過 EdgeScript 攔截 OPTIONS 請求並直接返回 204,避免預檢請求被拒絕。

  1. 登入 CDN 控制台,進入網域名稱管理頁面。

  2. 在網域名稱列表中選擇目標加速網域名稱。

  3. 在網域名稱配置頁面,單擊EdgeScript 自訂策略。

  4. 在類比環境頁簽單擊新增規則,在規則內容中添加以下規則:

    if eq($request_method, 'OPTIONS') { exit(204) }
  5. 將優先順序設定為 0 並儲存規則。在類比環境驗證 OPTIONS 請求返回 204 後,將規則發布到生產環境。

重要

EdgeScript 文法中的字串必須使用單引號,不支援雙引號。