全部產品
Search
文件中心

ApsaraVideo VOD:配置跨域資源共用

更新時間:Dec 27, 2024

當您需要跨域共用或者訪問資源時,您可以通過自訂HTTP回應標頭來實現。本文為您介紹如何?ApsaraVideo for VOD資源的跨域共用。

什麼是跨域資源共用

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

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

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

資料互動示意圖

未開啟跨域共用

  1. Client向example.com發出請求,例如:http://example.com/index.html,example.com給client響應了檔案index.html,但index.html通過指令碼發起了請求:http://example.org/api。

  2. Client向example.org發起請求時,攜帶了Origin:example.com,由於未開啟跨域共用,CDN預設不返回跨域頭,由於跨域限制,瀏覽器將攔截此請求的響應,導致報錯(頁面展示異常,顯示"No 'Access-Control-Allow-Origin' header is present on the requested resource"錯誤)。image

開啟跨域共用後

  1. Client向example.com發出請求,例如:http://example.com/index.html,example.com給client響應了檔案index.html,但index.html通過指令碼發起了請求:http://example.org/api。

  2. Client向example.org發起請求時,攜帶了Origin:example.com,開啟跨域共用後,CDN將會校正使用者要求標頭中Origin的值與配置的Access-Control-Allow-Origin的值是否匹配(支援單個值或多個值的精確匹配及泛網域名稱匹配),校正成功後返回跨域頭,如:Access-Control-Allow-Origin:http://example.com。

  3. Client收到響應後,檢查跨域回應標頭為http://example.com,滿足跨域共用存取原則,即可顯示相應結果。

開啟跨域資源共用

  1. 登入ApsaraVideo for VOD控制台

  2. 在左側導覽列選擇組態管理 > 分發加速配置 > 網域名稱管理,進入到網域名稱管理頁面。

  3. 網域名稱管理頁面,單擊目標網域名稱對應的配置

  4. 在指定網域名稱的左側導覽列,單擊缓存配置

  5. 單擊自訂HTTP回應標頭頁簽。

  6. 單擊添加,配置自訂HTTP回應標頭。

  7. 請按照以下內容進行選擇,設定指定允許的跨域請求的來源,然後單擊確定儲存配置。

    網域名稱管理-配置跨域訪問1.png

    參數

    樣本

    响应头操作

    添加

    自定义响应头参数

    Access-Control-Allow-Origin

    响应头值

    *

    說明
    • 回應標頭值支援配置為“*”,表示任意來源。

    • 回應標頭值非“*”的情況下,支援配置單個或多個IP、網域名稱,或者IP和網域名稱混合。相互間使用半形逗號(,)隔開。

    • 回應標頭值非“*”的情況下,必須包含協議頭“http://”或者“https://”。

    • 回應標頭值支援攜帶連接埠。

    • 回應標頭值支援泛網域名稱。

    是否允许重复

    不允许

    說明
    • 允许表示允許重複,即來源站點返回的頭會保留,同時會加上一個同名的頭。

    • 不允许表示不允許重複,即來源站點返回的頭會被新配置的同名頭覆蓋。

    本文以不允許重複為例,現場可根據實際環境而定。

    重要

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

    跨域驗證

    開啟

    說明
    • 跨域驗證只有在响应头操作增加自定义响应头参数為“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

  8. 請按照以下內容進行選擇,設定指定允許的跨域要求方法,然後單擊確定儲存配置。

    網域名稱管理-配置跨域訪問2.png

    參數

    樣本

    响应头操作

    添加

    自定义响应头参数

    Access-Control-Allow-Methods

    响应头值

    GETPOSTPUT

    說明

    如果您需要同時添加GET、POST、PUT,請使用半形逗號(,)隔開。

    是否允许重复

    不允许

    說明
    • 允许表示允許重複,即來源站點返回的頭會保留,同時會加上一個同名的頭。

    • 不允许表示不允許重複,即來源站點返回的頭會被新配置的同名頭覆蓋。

    本文以不允許重複為例,現場可根據實際環境而定。

配置樣本

樣本一

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

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

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

ApsaraVideo for VOD控制台上設定: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://aliyun.com,則CDN節點將不會響應Access-Control-Allow-Origin(網域名稱不匹配)。

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

樣本二

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

ApsaraVideo for VOD控制台上設定: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節點將不會響應Access-Control-Allow-Origin(網域名稱不匹配)。

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