全部產品
Search
文件中心

:OSS跨域資源共用(CORS)出現的常見錯誤及解決方案

更新時間:Oct 16, 2019

概述

本文主要介紹跨域資源共用(Cross Origin Resource Sharing,簡稱CORS)配置的常見錯誤及解決方案。

 

詳細資料

配置項

CORS的配置方法一般是針對每個訪問來源單獨配置規則,勿將多個來源加到一個規則,多個規則之間不要有覆蓋衝突。其它的選項只開放需要的許可權即可。CORS配置有以下幾項。

  • 來源(AllowedOrigin):允許跨域請求的來源,可以同時指定多個來源。配置時需帶上完整的域資訊,例如:http://10.X.X.100:8001或https://www.aliyun.com。注意,不要遺漏了協議名http或https,如果連接埠不是預設的80,還需要帶上連接埠。如果不能確定網域名稱,可以開啟瀏覽器的調試功能,查看Header中的Origin。網域名稱支援*萬用字元,每個網域名稱中允許最多使用一個*,例如https://*.aliyun.com。如果來源指定為*,則表示允許所有來源的跨域請求。
  • 允許 Methods:按照需求開通對應的方法即可,調試時可以全部選擇。
  • 允許 Headers:允許的跨域請求Header。允許配置多條匹配規則,以斷行符號間隔。在Access-Control-Request-Headers中指定的每個Header,都必須在Allowed Header中有對應項。Header容易遺漏,沒有特殊需求的情況下,建議設定為*,表示允許所有,大小寫不敏感。
  • 暴露 Headers:暴露給瀏覽器的Header列表,即使用者從應用程式中訪問的回應標頭,例如一個Javascript的XMLHttpRequest對象。不允許使用萬用字元。具體的配置需要根據應用的需求確定,只暴露需要使用的Header。如果不需要暴露可以不填。大小寫不敏感。該項是可選配置項。
  • 緩衝時間(MaxAgeSeconds):瀏覽器對特定資源的預取請求(OPTIONS請求)返回結果的緩衝時間,單位為秒。如果沒有特殊情況可以稍大一點,比如60秒。該項是可選配置項。

 

錯誤排除

報錯資訊

CORS配置錯誤會報如下錯誤。

  • 瀏覽器出現類似如下錯誤。
    OPTIONS http://bucket.oss-cn-beijing.aliyuncs.com/
    XMLHttpRequest cannot load http://bucket.oss-cn-beijing.aliyuncs.com/. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '{yourwebsiet}' is therefore not allowed access. The response had HTTP status code 403.

  • OSS報如下錯誤。
    <Code>AccessForbidden</Code>
    <Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Requet-Headers are not whitelisted by the resource's CORS spec.</Message>
  • 其它錯誤請參看OSS 403錯誤及排除

提示

  • CORS報錯一般是網站類應用導致,瀏覽器中可以查看請求詳情。如Chrome瀏覽器,按F12開啟開發人員工具,在Network中查看相應元素。
  • OSS返回的錯誤可以通過抓包擷取。如使用Wireshark,篩選器可以指定為網域名稱,即[$Bucket_Name].oss-cn-beijing.aliyuncs.com,[$Bucket_Name]為Bucket名稱。
  • OSS返回的錯誤也可以通過CORS的oss-h5-upload-js-direct偵錯工具擷取。

 

錯誤排查

CORS可能出現的錯誤如下所示。

  • 來源(AllowedOrigin)配置不正確。
  • Method(AllowedMethod)配置錯誤。
  • Allow Header配置錯誤。
  • Expose Header配置錯誤。

 

調試方法

在OSS控制台,選擇Bucket後,單擊 基礎設定,在跨網域設定中單設定,進行下述配置。

  • 將來源(AllowedOrigin)設定成*,確認該配置項無誤。如果設定成*後可以成功上傳,說明是之前的來源(AllowedOrigin)配置錯誤,請根據規則認真檢查。
  • 依次選擇“允許 Methods”的全部選項,即GET、PUT、DELETE、POST、HEAD,確認該設定項目無誤。
  • 將“允許 Headers”配置成*,確認該配置無誤。
  • 將“暴露 Headers”設定為指定值或者不填,確認該項配置無誤。

 

相關文檔

CORS的介紹及配置請參看設定跨域資源共用

 

適用於

  • Object Storage Service