这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
HTTP 协议的基本定义
什么是HTTP
Hyper Text Transfer Protocol超文本传输协议,是应用层协议,基于TCP协议,用于发起请求和响应请求,简单可扩展,无状态。
- 请求
- 响应
TCP协议特点:面向连接,一对一,可靠交付,面向字节流。
HTTP 协议发展历程
HTTP/1.1
HTTP/2
更快 更稳定 更简单
- 帧frame
HTTP/2通信的最小单位,每个帧都包含一个帧头,至少会标识出当前帧所属的数据流。 - 二进制
帧用二进制编码传输。 - 压缩算法
- 概念
- 消息
与逻辑请求或响应消息对应的完整的一系列帧。 - 数据流
已建立的连接内的双向字节流,可以承载一条或多条消息。交错发送,接收方重组织。
- 消息
- 特性
HTTP/2连接都是永久的,而且仅需要每个来源一个连接。
流控制:组织发送方向接收方发送大量数据的连接。
服务器主动/提前推送
HTTPS
在HTTP基础上经过TSL/SSL加密,提高安全性。
- 加密
对称加密:加密和解密都用的同一个密钥。
非对称加密:加密解密需要使用两个不同密钥:公钥,私钥。
证书不合法:
HTTP 协议的报文结构
方法
请求的特点
- 安全的 Safe
不会修改服务器数据的方法,GET HEAD OPTIONS - 幂等 Idempotent
同样的请求被执行一次和连续执行多次的效果是一样的,服务器状态也是一样的,所有安全的方法都是幂等的。GET HEAD OPTIONS PUT DELETE
状态码
RESTful API
一种API设计风格,REST:Representational State Transfer,表现层状态转换
- 每一个URI都代表一种资源
统一资源定位符(Uniform Resource Locator,URL),统一资源名称(Uniform Resource Name,URN)是URI的子集。
Web上地址的基本形式是URI,它有两种形式:一种是URL,这是目前URI的最普遍形式。另一种就是URN,这是URL的一种更新形式,URN不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。 - 客户端和服务器之间,传递这种资源的某种表现层。
- 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”。
常用请求头
常用响应头
缓存
强缓存:资源如果已经有了,就可以直接用。
协商缓存:有缓存,但是要确认是否可以使用。
- 缓存过程
cookie
场景分析
打开toutiao.com,获取css:静态资源
登录用户,请求为OPTIONS:跨域
下次进入页面依然为登录状态:鉴权
跳转网站,域名修改后依然为登录状态:SSO单点登录
静态资源
缓存+CDN+文件名hash
CDN:Content Delivery Network,通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
如果要对css静态文件进行修改,但强缓存时间未到期,怎样保证用户拿到最新的资源:修改文件名
跨域
- 域的组成:任意一个有区别,都称为跨域。
- 如何处理跨域
- CORS(Cross-Origin Resource Sharing)跨域资源共享
先发起一个预请求,获知服务器端是否允许该跨域请求(复杂请求才发起)。
OPTIONS请求
- 代理服务器
同源策略是浏览器的安全策略,不是HTTP的。
- Iframe通信
鉴权
- Session+cookie
- JWT(JSON web token)
适合使用jwt的场景:
有效期短,只希望使用一次,比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性: 能标识用户,该链接具有时效性通常只允许几小时之内激活),不能被算改以激活其他可能的账户,一次性的。这种场景就适合使用jwt。
而由于jwt具有一次性的特性,单点登录和会话管理非常不适合用,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。
SSO单点登录
什么是单点登录
单点登录其实就是用户的登录态在多个系统间进行共享。我们可以这样思考,假如用户在 A系统 登录后,然后点击 B系统,能够把用户相关信息给带过去,然后在 B系统中判断存在用户信息, 从而进行登录。这样做对于用户来说是完全无感知的,只需要在系统层面帮助用户进行登录即可。
单点登录(SSO)看这一篇就够了!❤️这次不慌了
实战
浏览器
如何发起HTTP请求
node
用户体验
了解更多
通信方式
- WebSocket
浏览器与服务器进行全双工通讯的网络技术,场景:实时性要求高,如聊天室,URL使用ws://或wss://等开头
- QUIC
Quick UDP Internet Connection,基于UDP。