Q: http有什么特性?
http是无状态协议
Q: 什么是无状态?
http协议自身不对请求和响应之间的通信状态进行保存,即协议对于发送过的请求或响应都不做持久化处理。每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息
Q: 为什么这么设计?这么设计有什么好处或坏处吗?
好处:这是为了更快的处理大量事务,确保协议的可伸缩性
坏处:没法保存用户登录态
Q: 那如何保存登录态?
使用cookie及sessionId
Q: 跨域请求可以发送cookie吗?
默认是不可以,需要前后端共同设置 前端:
// 原生api
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
// axios
axios.post('http://xxx.com/', {}, {
withCredentials: true,
})
后端:
Access-Control-Allow-Origin: 'http://client.com'
Access-Control-Allow-Credentials: true
而且如果前端想要跨域发送非简单请求(比如post带body,或put, delete等),浏览器会先发送一个OPTIONS预请求(preflight),确认服务器是否能接收这个请求。如果服务器确认可以请求的话会返回204状态的响应。 预请求主要是验证Method和Headers
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type
参考资料:
- 图解HTTP