HTTP 协议
HTTP协议叫超文本传输协议,是一种应用层协议。可以传输文字,图片,音频和视频等数据,
- TCP:HTTP协议基于TCP协议,工作与C/S架构。
- 数据:HTTP允许传输任意类型的数据
- 请求响应:每次连接只能处理一个请求,客户端收到应答后,断开连接
- 无状态:两次连接请求是相互独立的
HTTP 1.0/1.1/2.0/3.0
协议名称 | 说明 |
---|
HTTP1.0 | 1个TCP,1次请求-响应 |
HTTP1.1 | 1个TCP,有限个请求 |
HTTP2.0 | 1个TCP,多路复用(帧) |
HTTP3.0 | 移动设备,多路复用,安全 |
HTTP 1.0
- 仅支持非持久连接,每次请求都需要建立新的TCP连接
HTTP1.1
- 支持持久连接,在1个TCP连接上可以进行多次HTTP请求响应
- 同步-非流水线:客户端请求后必须等待响应才能进行下1次请求
- 异步-流水线:客户端请求后不用等待响应就能进行下1次请求
HTTP2.0
多路复用:
- 使用1个HTTP2.0连接发送多路请求/响应消息
- HTTP2.0将信息单位缩小为帧,并行双向在1个连接上交流(多路复用)
- HTTP1.1同时对同1域名请求的数量有限制,这也是CDN出现的原因。
HTTP3.0
HTTP2.0问题:
- 多路复用:有序字节流导致的对头阻塞,影响了HTTP2.0的多路复用
- TLS:TLS增加了握手延迟,建立TCP连接的时长还可降低1倍
- 无线环境下高速移动设备:基于TCP 4元组(源IP地址,源端口号,目的IP地址,目的端口号)标识TCP连接的方式适用于有线网络,不适用于无线网络,在无线网络环境下高速移动的设备(手机坐高铁),IP地址会频繁变动,引起TCP 4元组标识变化,导致TCP和TLS频繁重新连接
HTTP3.0解决:
- 多路复用:HTTP3.0基于UDP重新定义连接,使用QUIC(Quick UDP Internet Connections)(Google)实现了无序、并发传输字节流,解决了队头阻塞问题
- TLS:HTTP3.0重定义了TLS加密QUIC头部的方式。1 RTT完成连接建立与密钥协商
- 无线环境下高速移动设备:分离Packet、QUIC Frame、HTTP3 Frame
HTTP POST/GET区别
简单的查询请求使用GET,增删改复杂查询可以使用POST
- 速度:GET请求比POST请求快一些
- 编码:GET只支持ASCII编码 包括中文,POST支持多种编码
- 数据量:GET的URL编码有长度限制,POST可以发送更大数据量
- 安全性:POST更安全,不会作为URL的一部分
- 幂等性:GET,HEAD,PUT 和 DELETE 是幂等方法。POST不是
- 读写:GET,HEAD,OPTIONS不会改变服务器状态。POST,PUT,PATCH,DELETE会
- 缓存:GET,HEAD可缓存。POST一般可缓存。PUT,DELETE不可缓存
- 异步:XMLHttpRequest在 AJAX 中被大量使用, XMLHttpRequest的POST的header和data是分开发送的。XMLHttpRequest的GET的header和data是一起发送的
HTTP GET的URL编码
URL编码为了区分分隔符
key1=value1&key2=value2
- key和value的分隔符是
=
,ASCII码16进制 3D - entry和entry的分隔符是
&
,ASCII码16进制 26 - value中含有分隔符,
key=va&lu=e
,URL编码,key=va%&lu%=e
,在分隔符前加上%
HTTP 常用状态码及使用场景
分类 | 作用 |
---|
2xx | 请求成功 |
4xx | 客户端错误,请求报文错误 |
5xx | 服务端错误 |
1xx | 中间状态,需要后续请求 |
3xx | 重定向状态,需要重新请求 |
状态码 | 作用 |
---|
200 | 请求成功 |
404 | 资源未找到 |
403 | 服务端禁止访问 |
400 | 请求错误 |
500 | 服务端错误 |
503 | 服务端繁忙 |
101 | 切换协议,HTTP到WebSocket |
301 | 永久重定向,会缓存 |
302 | 临时重定向,不会缓存 |
304 | 协商缓存命中 |
HTTP 301/302状态码的区别和用途
状态码 | 作用 |
---|
301 | 永久重定向,会缓存 |
302 | 临时重定向,不会缓存 |
301 Move Permanently
- 多个域名指向同一资源,可以让n-1个域名永久重定义到1个域名,以累加网站在搜索引擎中的权重
302 Move Temporarily
- 页面临时重定向,有网络劫持风险,会降低网站在搜索引擎中的权重,一般别使用
HTTP 长连接实现,超时
HTTP HTTPS
收费:HTTPs需要使用可信机构颁发的ssl证书,需要收费
效率:HTTPs多了一层ssl,效率相对低
安全:HTTP是明文传输,HTTPs是ssl加密传输
端口:HTTP是80端口,HTTPs是443端口
HTTP Keep-Alive 和 非Keep-Alive区别
HTTP 长连接短连接使用场景
HTTP Cookie 和 Session