我們都知道,在發同域請求時,瀏覽器會將cookie自動加在request header中。但大家是否遇到過這樣的場景:在發送跨域請求時,cookie並沒有自動加在request header中。
造成這個問題的原因是:在CORS標准中做了規定,默認情況下,瀏覽器在發送跨域請求時,不能發送任何認證信息(credentials)如"cookies"和"HTTP authentication schemes"。除非xhr.withCredentials為true(xhr對象有一個屬性叫withCredentials,默認值為false)。
所以根本原因是cookies也是一種認證信息,在跨域請求中,client端必須手動設置xhr.withCredentials=true,且server端也必須允許request能攜帶認證信息(即response header中包含
Access-Control-Allow-Credentials:true),這樣瀏覽器才會自動將cookie加在request header中。
另外,要特別注意一點,一旦跨域request能夠攜帶認證信息,server端一定不能將
Access-Control-Allow-Origin設置為*,而必須設置為請求頁面的域名。