問題描述
在OSS中將Access-Control-Allow-Origin的值設定為萬用字元"*",並在前端代碼中將Access-Control-Allow-Credentials設定為true,然後在瀏覽器跨域訪問OSS檔案時,出現以下報錯:
Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.
問題原因
瀏覽器的安全性原則要求Access-Control-Allow-Credentials為True時,Access-Control-Allow-Origin的值不能為萬用字元"*",以防止任意域訪問資源並擷取Credentials資訊(包括Cookies、Authorization Headers等敏感性資料)。
解決方案
如果您需要在要求標頭中保留Credentials資訊,將Access-Control-Allow-Origin的值從萬用字元
*
修改為具體的網域名稱(例如https://example.com
)。具體操作,請參見跨網域設定。如果您不需要在要求標頭中保留Credentials資訊,您可以在前端代碼中將Access-Control-Allow-Credentials設定為false。範例程式碼如下。
xhr.withCredentials = false