CORS跨域傳送Cookie

2021-08-20 14:44:51 字數 1603 閱讀 4593

由於預設情況下瀏覽器對跨域請求不允許攜帶cookie,所以這次開發再與前端同學在許可權驗證這塊踩了好多坑,故將一些教訓寫下來,共勉!

在 2014 年 w3c 發布了 cors recommendation 來允許更方便的跨域資源共享,同時cors也允許我們使用額外的相應頭字段來允許跨域傳送cookie。

設定withcredentialstrue即可讓該跨域請求攜帶 cookie。 注意攜帶的是目標頁面所在域的 cookie。以jquery示例

$.ajax(",

async:false,

xhrfields: ,

success: function(msg)

});

此處還需要設定伺服器接受跨域傳送的cookie。 否則會被瀏覽器的同源策略擋住:

伺服器主要是設定response access-control-allow-credentials為"true", 即可允許跨域請求攜帶 cookie。

相關**如下:

response.setheader("access-control-allow-origin", request.getheader("origin")); 		

response.setheader("access-control-allow-methods", "post, get, options, delete,put");

response.setheader("access-control-max-age", "3600");

response.setheader("access-control-allow-headers", "origin, content-type, x-auth-token , authorization"); response.setheader("access-control-allow-credentials", "true");;

跨域傳送 cookie 還要求access-control-allow-origin不允許使用萬用字元事實上不僅不允許萬用字元,而且只能指定單一網域名稱

原文如下:

if the credentials flag is

true

and the response includes zero or more than one access-control-allow-credentials header values return fail and terminate this algorithm. –w3c cross-origin resource sharing

我採取的策略是request.getheader(「origin」)每次都獲取請求的源,但是這樣做的缺點也是很多的,主要就是不安全,任意請求攜帶cookie都可以接受,最好的就是服務端可以維護乙個接受cookie的origin列表,驗證origin後在將其設定為access-control-allow-origin的值。

在正確配置後就可以跨域傳送cookie進行客戶端與服務端之間相關的一些會話了,當然如果直接就是同一域的話,那就肯定沒這些問題啦,有時間再在這塊深入一下^_^!

CORS 跨域攜帶 Cookie 傳送請求

當在 a.com 進行訪問時,如何向 b.com 攜帶 b.com 的 cookie 傳送乙個請求?a.com 是乙個第三方 需要通過訪問 b.com 的介面來獲取使用者的一些資訊。這時候,b.com 上的使用者已經登入了。我們知道,在傳送跨域請求時,需要後端設定一些請求頭,否則瀏覽器不會允許客戶端...

CORS跨域原理

請求 響應 access control allow credentials true access control allow origin 預撿請求 request method options accept language zh cn,en q 0.8,zh q 0.6 access con...

CORS跨域請求

瀏覽器的同源策略會導致跨域,這裡同源策略又分為以下兩種 只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域,之間的請求就是跨域操作。在同源策略下會禁止跨域,實際上跨域請求時,請求會向伺服器發出,伺服器也會進行響應,但是當收到返回的資料時發現跨域所以忽略了返回的內容並報錯。當請求同時滿足下面兩個...