跳转至

几个重点:

  • HTTP不同版本的差异:HTTP/1.0、HTTP/1.1、HTTP/2 和 HTTP/3

    • 1.0 vs 1.1

      • 连接方式 : HTTP 1.0 为短连接,HTTP 1.1 支持长连接。

      • 状态响应码 : HTTP/1.1 中新加入了大量的状态码,光是错误响应状态码就新增了 24 种。比如说,100 (Continue)——在请求大资源前的预热请求,206 (Partial Content)——范围请求的标识码,409 (Conflict)——请求与当前资源的规定冲突,410 (Gone)——资源已被永久转移,而且没有任何已知的转发地址。

      • 缓存处理 : 在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略

      • 带宽优化及网络连接的使用 :HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

      • Host 头处理 : HTTP/1.1 在请求头中加入了Host字段。

    • HTTP/2 使用二进制协议并支持多路复用

    • HTTP/3 基于QUIC(UDP)协议实现,在低延迟和丢包恢复方面表现出色

  • HTTP vs HTTPS

  • TLS 1.2 vs TLS 1.3
  • session、token、 cookie
  • HTTP常见头域
  • 长连接和短连接,前者意味着什么
  • HTTP场景问题:
    • 队头阻塞:

单点登录的常见协议、优势和解决方案 - Authing身份云

什么是单点登录?

约 1420 个字 预计阅读时间 5 分钟

单点登录的三种实现方式》中提到,单点登录英文全称 Single Sign On,简称 SSO。它的定义是:在多个应用系统中,用户只需要登录一次,即可访问所有相互信任的应用系统。例如,常见的单点登录是通过一次登录访问各种应用程序。例如,登录您的员工账号就可以让您访问飞书、销售易、客户系统等应用程序,无需再次输入账号和密码。

常见的单点登录五种协议

常见的 OIDC、OAuth 2.0、SAML2、CAS 3.0、LDAP 为标准认证协议。标准协议会按照特定的方式传递用户信息,正规的业务系统产品都会支持标准协议,使用标准协议对接可以一劳永逸地完成对接。

标准协议的推荐度:OIDC > SAML2 > CAS 3.0 > LDAP > OAuth2.0。

基本概念

Cookie、Session、Token、JWT一次性讲完_哔哩哔哩_bilibili

http是无状态的,用户通过账号密码登录成功后,为避免后续请求每次都携带账号密码并进行用户认证。

服务端在初次校验通过后,通过”Set-Cookie: xxx”头域携带关键信息响应给客户端,客户端浏览器配合下次发送请求时携带“cookie: xxx”头域,有了该头域,则无需携带用户账号密码,服务端也会放通认证。

HTTP Cookie - HTTP | MDN

Cookie - HTTP | MDN

Set-Cookie - HTTP | MDN

服务器密令

上述cookie机制被人伪造的风险很高,因此服务端引入密令机制,即仅服务端保存命令并初次对cookie内容进行加密后返回“set-cookie: xxx&sign=”给客户端,客户度携带加密过的“cookie: xxx&sign=”请求给服务器端,服务端以及相同的密令进行加密比对,实现一定程度的安全性。

session

另外需要考虑一个问题,并不是所有的用户信息都需要通过cookie携带给客户端,总有些信息存放在服务端更合适也更安全 ,因此引入sessionid机制,服务端通过一个sessionId关联用户的会话信息,针对这部分信息,服务端返回“set-cookie:sessionId”,客户端下次访问携带“cookie:sessionId”,服务端仅需通过sessionId关联查询即可。当然这个场景需要解决分布式系统的共享session问题。

token

以上主要是围绕cookie机制解决http无状态的问题,cookie主要是浏览器在支持,其他客户端还有APP、小程序或者API等可能天然是没有cookie机制的,另外很多时候客户会禁用cookie,且cookie不能解决跨域问题?

因此,这些场景的http无状态问题需要通过token机制解决:

  • 原先浏览器测的cookie存储功能 —> 其他存储方式
  • 原先sessionId —> 改名为token
  • 原先服务端响应“set-cookie:sessionId” —> 服务端响应“Token: xyz“
  • 原先客户端请求“cookie:sessionId ” —> 客户端请求“Authorization: Bearer xyz”

什么是 Bearer Token - Apifox 帮助文档

JWT

分布式共享session的方案依赖redis等中心化组件,有可靠性风险。还不如直接用这些信息加密并编码成token进行无状态携带,方案即简单又可靠,无需引入其他中心化组件。

为保证token的格式和签名算法的规范性,让业界各类BS架构都认可,则引入JWT规范。

即jwt是对Authorization: Bearer token中token格式的规范约束。

JSON Web Tokens - jwt.io

JSON Web Token 入门教程 - 阮一峰的网络日志

参考资料

详解HTTP协议版本(HTTP/1.0、1.1、2.0、3.0区别)-CSDN博客

HTTP vs HTTPS(应用层)

HTTP 1.0 vs HTTP 1.1(应用层)

HTTP 常见状态码总结(应用层)

关于队头阻塞(Head-of-Line blocking),看这一篇就足够了