使用cookie的session,有一個重要的參數:withCredentials

HTTP協議最常用的是1.1,現在HTTP2和HTTP3都有了,始終保持着無狀態的設計,這是爲什麼呢?主要原因是爲了實現起來邏輯簡單。首先明確,HTTP無狀態是指兩個HTTP請求之間沒有關聯,而不是指協議沒辦法攜帶信息,HTTP可以攜帶信息。一般線上完成一件事情需要多次HTTP請求,且多次的請求之間是有事務性的關係的,HTTP無狀態,就需要我們自己建立關聯機制:客戶端和服務端各自攜帶信息進行認證。比如,我們在HTTP中的header中攜帶認證信息,如Cookie,Referer等,將信息存儲在哪裏好呢?

  • 可以存在Cookie中,但Cookie隨着請求來回跑,有可能會被別人攔路搶劫,不安全;
  • 可以放在服務器中,Cookie只攜帶查看信息但憑證,這就是session;
  • 可以在Referer的URL中querystring攜帶。

Session相對安全性高一些,用的比較廣,一般的web框架的session功能也足夠使用,當應用逐漸變多時,我們會想到將認證功能獨立爲一個單獨的服務,並且擁有單獨的域名,這就會涉及到跨域時的session,通常服務端問題不大,統一存儲在一個地方,共享給所有項目使用即可。但是cookie會有跨域問題,通常跨域我們會使用cors,cors中有一個比較重要的參數:withCredentials,有這個參數,當請求了異域的登錄API時,後續請求本項目的API的請求才會攜帶登錄API返回的set-cookie。withCredentials對於同一應用內部不會起作用。

 

參考

  1. https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredential
  2. https://zh.wikipedia.org/wiki/%E6%97%A0%E7%8A%B6%E6%80%81%E5%8D%8F%E8%AE%AE
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章