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请求时手动处理?
cookie
是由浏览器管理,存储在内存或磁盘的数据。前端可以利用JavaScript
操作document
对象创建、读取、修改、删除cookie
,服务端可以利用HTTP
响应头的set-cookie
字段设置cookie
,cookie
不是由前端携带的。当
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
之后,如果没有使用其他浏览器存储方案,比如sessionStorage
和localStorage
,此时浏览器无法保存session id
。然而,不管浏览器是否禁用了
cookie
,url
携带的session id
都是由js
处理的:以上是个人理解,有不对的地方请多指教