浏览器内部是怎么携带cookie到后台的?

Krehizi
  • 49

1.前端访问后台http接口时,后台可以获取到cookie,前端携带的cookie是浏览器自行处理添加上的?还是需要前端手动编写相关代码处理的?

比如window.location.href="url"这一句,是否有携带cookie?

ajax库的请求,withCredential为true时携带cookie,库的内部代码是否与浏览器内部已经处理过cookie的相关数据的,内部大概是怎么处理的呢?

2.当浏览器禁用掉cookie,是指访问后台时不再携带cookie,还是当后台返回cookie时,浏览器不再存储到硬盘?

如果是不再存储到硬盘,那么通过url重写的机制携带session id,session id是怎么被浏览器保存的?

禁用掉cookie,url重写的机制是浏览器自发处理的,还是需要前端代码在进行http请求时手动处理?

回复
阅读 1.1k
3 个回答
✓ 已被采纳

cookie是由浏览器管理,存储在内存或磁盘的数据。前端可以利用JavaScript操作document对象创建、读取、修改、删除cookie,服务端可以利用HTTP响应头的set-cookie字段设置cookiecookie不是由前端携带的。

JavaScript操作XMLHttpRequest对象使浏览器发起HTTP请求时,区分同源和非同源:

同源请求:XMLHttpRequest把当前域下可读取的所有cookie都打包到HTTP请求头的Cookie,服务端也是通过解析HTTP请求头的Cookie来获取相关数据的。

跨域请求:默认不携带cookie,此时希望HTTP请求仍携带cookie就需要把XMLHttpRequest.withCredential设置为true,同时服务端也要设置Access-Control-Allow-Origin允许被跨域请求,否则无效。

window.location.href="url"本质上就是让浏览器向<url>发起一次Get请求,所以此时浏览器如果有存储了该域下的cookie则携带。

当浏览器禁用了cookie,禁用前已经存在的cookie仍保存着,但是发起的HTTP请求不会携带cookie。禁用后尽管HTTP响应头中有set-cookie,浏览器也不会存储。

最后一点我不确定你的意思是不是说session id携带在url的后面。禁用cookie之后,如果没有使用其他浏览器存储方案,比如sessionStoragelocalStorage,此时浏览器无法保存session id

然而,不管浏览器是否禁用了cookieurl携带的session id都是由js处理的:

const id = 'sessionid'
window.location.href=`https://segmentfault.com/apiurl?sessionId=${id}`

以上是个人理解,有不对的地方请多指教


1,前端自行决定是否携带cookie,fetch credentials选项可以配置,默认携带同源cookie
2,浏览器禁用后,会存,但是请求不会携带

宣传栏