使用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

你可能感兴趣的:(Web前端,Web后端)