在送出 Ajax 時,將 cookie 值一並送出
若 Ajax 送出的網址為相同 domain
Ajax 會將瀏覽器的 Cookie 放在 header 的 Cookie 欄位以字串 "key1=value1; key2=value2; key3=value3" 的形式送出
若 Ajax 送出的網址為相不同 domain
預設行為不送 Cooke 這個 header。
若這種情況還是要送 cookie,則需要瀏覽器和伺服器互相配合
瀏覽器:
送 Ajax 時需要加入
axios.get('/someCorssOriginUrlIWantToSendCookie', { headers:{ withCredentials: true } });
伺服器:
回應瀏覽器的 preflight request 時需要特別在 header 注意兩個設定:
Access-Control-Allow-Origin 'http://some.domainname'
這種 CORS 情境不能為 *(wildcard),需要指定特定的 domain,且需要和 preflight request 相同。
Access-Control-Allow-Credentials true
註:這邊只針對送出 cookie 時要特別調整的兩個 header 的設定方式,由於 CROS 時,瀏覽器送出 Ajax 的 request 將格式依情況而定。例如 Ajax content-type 為 application/json,伺服器在回應 preflight request 時需要在 header 中加入 Access-Control-Allow-Headers Content-Type,表示伺服器接受這種 content-type 的 request,這部分不在這裡討論。
做完上面的設定,瀏覽器送出 Ajax 時,即會在 header 中加入 Cookie 欄位,值如同同 domain 的形式一樣。
參考網址:MDN
留言
張貼留言