[ HTTP 使用指南 | 青训营笔记]

240 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

HTTP 协议的基本定义

image.png

什么是HTTP

Hyper Text Transfer Protocol超文本传输协议,是应用层协议,基于TCP协议,用于发起请求和响应请求,简单可扩展,无状态。

  • 请求
    image.png
  • 响应
    image.png
    TCP协议特点:面向连接,一对一,可靠交付,面向字节流。

HTTP 协议发展历程

image.png

HTTP/1.1

image.png

HTTP/2

更快 更稳定 更简单

  • 帧frame
    HTTP/2通信的最小单位,每个帧都包含一个帧头,至少会标识出当前帧所属的数据流。
  • 二进制
    帧用二进制编码传输。
  • 压缩算法
  • 概念
    1. 消息
      与逻辑请求或响应消息对应的完整的一系列帧。
    2. 数据流 已建立的连接内的双向字节流,可以承载一条或多条消息。交错发送,接收方重组织。
      image.png
  • 特性
    HTTP/2连接都是永久的,而且仅需要每个来源一个连接。
    流控制:组织发送方向接收方发送大量数据的连接。
    服务器主动/提前推送
    image.png

HTTPS

在HTTP基础上经过TSL/SSL加密,提高安全性。

  • 加密
    对称加密:加密和解密都用的同一个密钥。
    非对称加密:加密解密需要使用两个不同密钥:公钥,私钥。
    image.png
    证书不合法:
    image.png
    image.png

HTTP 协议的报文结构

方法

image.png

请求的特点

  1. 安全的 Safe
    不会修改服务器数据的方法,GET HEAD OPTIONS
  2. 幂等 Idempotent
    同样的请求被执行一次和连续执行多次的效果是一样的,服务器状态也是一样的,所有安全的方法都是幂等的。GET HEAD OPTIONS PUT DELETE

状态码

image.png

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,对服务器端资源进行操作,实现“表现层状态转化”。
    image.png

常用请求头

image.png

常用响应头

image.png

缓存

强缓存:资源如果已经有了,就可以直接用。
协商缓存:有缓存,但是要确认是否可以使用。
image.png

  • 缓存过程
    image.png

cookie

image.png

场景分析

打开toutiao.com,获取css:静态资源
登录用户,请求为OPTIONS:跨域
image.png
下次进入页面依然为登录状态:鉴权
跳转网站,域名修改后依然为登录状态:SSO单点登录

静态资源

缓存+CDN+文件名hash
CDN:Content Delivery Network,通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
image.png
如果要对css静态文件进行修改,但强缓存时间未到期,怎样保证用户拿到最新的资源:修改文件名

跨域

  • 域的组成:任意一个有区别,都称为跨域。
    image.png
    image.png
  • 如何处理跨域
  1. CORS(Cross-Origin Resource Sharing)跨域资源共享
    先发起一个预请求,获知服务器端是否允许该跨域请求(复杂请求才发起)。
    OPTIONS请求
    image.png
    image.png
  2. 代理服务器
    同源策略是浏览器的安全策略,不是HTTP的。
    image.png
  3. Iframe通信

鉴权

  • Session+cookie
    image.png
  • JWT(JSON web token)
    image.png
    适合使用jwt的场景:
    有效期短,只希望使用一次,比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性: 能标识用户,该链接具有时效性通常只允许几小时之内激活),不能被算改以激活其他可能的账户,一次性的。这种场景就适合使用jwt。
    而由于jwt具有一次性的特性,单点登录和会话管理非常不适合用,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。

SSO单点登录

image.png
什么是单点登录
单点登录其实就是用户的登录态在多个系统间进行共享。我们可以这样思考,假如用户在 A系统 登录后,然后点击 B系统,能够把用户相关信息给带过去,然后在 B系统中判断存在用户信息, 从而进行登录。这样做对于用户来说是完全无感知的,只需要在系统层面帮助用户进行登录即可。
单点登录(SSO)看这一篇就够了!❤️这次不慌了

实战

浏览器

如何发起HTTP请求
image.png
image.png

node

image.png
image.png

用户体验

image.png
image.png

了解更多

通信方式

  • WebSocket
    浏览器与服务器进行全双工通讯的网络技术,场景:实时性要求高,如聊天室,URL使用ws://或wss://等开头
    image.png
  • QUIC
    Quick UDP Internet Connection,基于UDP。
    image.png
    image.png