http基础知识简介

56 阅读1分钟

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

参考资料:

  1. 图解HTTP