HTTP协议 | 青训营

93 阅读2分钟

初识

超文本传输协议,不止传输文本

协议分析

发展

http/2

更快 更稳定 更简单

  • 通信的最小单位,每个帧有帧头,也有标志当前帧所属的数据流
  • 使用二进制协议,压缩header,提高了传输速度

消息:与逻辑请求或响应对应的完整的一系列帧

数据流:已建立的连接内的双向字节流(请求+响应)

不需要串行发送,可以交错发送,接收方重组织

  • 连接是永久的,可复用
  • 流控制:阻止发送方向接收方发送大量数据(如暂停视频后,拒绝接收,将资源留给其他)
  • 服务器推送:服务端可以主动push 一些相关信息(如请求html,主动push js css)

HTTPS

经过TSL/SSL加密

image.png

报文

起始行

使用RESTful风格

请求: method path version

image.png 响应: version statusCode StatusMesssage

image.png

请求头与响应头

image.png

image.png

缓存

强缓存 本地有,可以直接用

协商缓存 要与服务端通信,确定是最新的可以用

与缓存相关的头信息

image.png

缓存的过程

image.png

cookie

image.png

场景分析

静态资源部署方案

缓存+CDN+文件名hash(每次更新都更改文件名)

CDN: Content Delivery Network

在多个地方分布服务器节点,通过就近性和服务器负载判断从哪个服务器取资源 image.png

登录

跨域 image.png

  • 协议、主机、端口号三部分都要完全一样
  • https 默认端口号是443,http 默认端口号是80, 可以省略

跨域请求方式

CORS

复杂请求先发送预请求(请求方式OPTIONS),获知服务端是否允许,在发送主要的请求

image.png

代理服务器

同源策略是浏览器的,不是HTTP的

因此可以部署一个同源的代理服务器来转发请求

webpack中有插件可以实现

鉴权

如何记住登录状态?

Session+Cookie

image.png

JWT(JSON web token)(邮箱里找回密码的链接)

image.png

SSO 单点登录

如何在跳转到不同的网页依然携带登录信息?

在SSO站点上登录,存储登录信息,每次无登录态先去询问SSO是否有登录态

image.png

实战

发起http请求

ajax 的 xhr

image.png

image.png

ajax 的 fetch

image.png

node 标准库 HTTP/HTTPS

image.png

axios

image.png

用户体验

速度

image.png

image.png

稳定性

image.png

扩展

websocket

全双工 URL用 ws:// wss://

场景: 实时性要求(聊天室)

QUIC

基于UDP