前后端 HTTP
HTTP,Hyper Text Transfer Protocol,即超文本传输协议。
一、什么是 HTTP ?
HTTP 基于 TCP/IP 通信协议
HTTP 定义了浏览器(即万维网客户)怎么向万维网服务器请求万维网文档,以及服务器怎么将文档传送给浏览器
HTTP 是短连接的
建立 TCP 连接后就开始传输数据,数据传输结束后就释放连接
HTTP 是无状态的,它并没有 “记忆”,每次 HTTP 请求都是独立的
HTTP 是媒体独立的
任何类型的数据都可以通过 HTTP 传送
二、请求报文
1. 请求行
方法,即请求方法
- OPTION:用于跨域预检
- GET
- HEAD:用于读取信息首部
- POST
- PUT
- DELETE
- TRACE:用于环回测试
- CONNECT:用于代理服务器
常用的请求方式是 GET 和 POST,其中:
- GET 传递的内容通过 URL 传递,POST 传递的内容放在请求体中
- GET 在浏览器回退时是无害的,而 POST 会再次提交请求
- GET 产生的 URL 地址可以被保存,而 POST 不可以,因此
- GET 请求可以被保存,而 POST 不可以
- GET 请求可以被保存在历史记录中
- GET 传递的内容有长度限制,而 POST 没有
- POST 相对”更安全”
URL
版本
2. 首部行
3. 实体主体
通常不存在。
三、响应报文
1. 状态行
版本
状态码
- 响应状态码都是 3 位数字
- 分类:
- 1XX:表示客户端的请求未完成
- 2XX:成功
- 3XX:重定向
- 4XX:客户端错误
- 5XX:服务器端错误
短语,用于描述状态码
2. 首部行
Content-Type:服务器告诉客户端本次响应体的数据格式及编码格式
Content-disposition:服务器告诉客户端以什么格式打开响应体数据
- in-line:默认值,在当前页面打开
- attachment;filename=xxx:以附件形式打开响应体
3. 实体主体
可能存在,用于放置响应内容。
四、HTTP/1.1
- 支持持久连接:
- HTTP/1.0 是短连接,每次 HTTP 请求都会建立和释放 TCP 连接,这将造成巨大的开销
- HTTP/1.1 增加了 “持久连接” 机制,多个 HTTP 请求可以复用同一个 TCP 连接
- 请求头中新增了 host 字段,用于指明服务器的域名
五、HTTP/2
HTTP/1.1 中,报文头为文本,数据体为文本或二进制;HTTP/2.0 中,报文头和数据体都是二进制
HTTP/2.0 中,多个 HTTP 请求不仅可以复用同一个 TCP 连接,而且还可以同时发送,不需要串行发送
HTTP/2.0 支持头信息压缩,一方面,头信息会使用 gzip/compress 压缩;另一方面,客户端和服务器都会维护一个头信息表,从而避免相同字段的重复发送
HTTP/2.0 允许服务器主动向客户端发送静态资源
六、HTTP/3
HTTP/3 基于 QUIC 协议。
QUIC,Quick UDP Internet Connection,其目的是替代 TCP,它具有类似 TCP 的连接管理、拥塞窗口、流量控制等网络特性,并且具有更快建立连接、更低延迟等特点。