HTTP

正经人谁学HTTP啊

初识

image-20230211094221823

什么是HTTP?

image-20230211094241402

协议分析

变化

image-20230211094253459

分析

以HTTP/1.1为例:

image-20230211094305325

1.Method

常见

image-20230211094316160

特点

  • Safe安全:不会修改服务器的数据的方法

    GET HEAD OPTIONS

  • Indempotene幂等:同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有的safe的方法都是幂等的

    GET HEAD OPTIONS PUT DELETE

2.状态码

常见

image-20230211094325151

RESTful API

Representational State Transfer(REST)ful API

一种API设计风格

特点
  1. 每个URI代表一种资源
  2. 客户端和服务器之间,传递这种资源的某种表现层
  3. 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
举例

image-20230211094336678

3.请求头

常用请求头

image-20230211094405977

4.缓存

强缓存/协商缓存

image-20230211094419297

优先级/流程

image-20230211094428650

image-20230211094442637

HTTP/2

概述

更快更稳更简单

一些名词

  • 帧:HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流
  • 二进制 极大提高效率
  • 压缩算法 极大提高效率
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧。
  • 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
  • 交错发送,接收方重组织

一些特性

  • HTTP/2连接都是永久的,而且仅需要每个来源一个连接
  • 流控制:阻止发送方向接收方发送大量数据的机制
  • 服务器推送:服务器主动推送一些信息(比如一些静态资源,但是要根据实际情况,不要盲目怼进去)

HTTPS

概述

  • HTTPS Hypertext Transfer Protocol Secure
  • 经过TSL/SSL加密

加密

  • 对称加密:加密和解密都是使用同一个密钥
  • 非对称加密,加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)
  • 为了达到更高安全性——两者混用↓

image-20230211094458634

常见场景

静态资源

好玩吧

image-20230211094458634

登录

image-20230211104616306

OPTIONS引出

  • 跨域问题-cross-origin
  • 需要same-origin

https: //www.example.com :443
scheme host name port

如何解决跨域问题?

  1. CORS Cross-Origin Resource Sharing

    • 预请求:获知服务端是否允许该跨源请求(复杂请求)

    • 相关协议头
      Access-Control-Allow-Origin
      Access-Control-Expose-Headers
      Access-Control-Max-Age
      Access-Control-Allow-Credentials
      Access-Control-Allow-Methods
      Access-Control-Allow-Headers
      Access-Control-Request-Method
      Access-Control-Request-Headers
      Origin

  2. 代理服务器

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

      image-20230211105054923

  3. Iframe

    • 诸多不便

携带信息

  1. 向什么地址做了什么动作?(栗子)
    • 使用POST方法
    • 目标域名https:/sso.toutiao.com
    • 目标path/quick_login,/v2/
  2. 携带了哪些信息,返回了哪些信息?
    • 携带信息
      Post body,数据格式为form
      希望获取的数据格式为json
      已有的cookie
      
    • 返回信息
      数据格式json
      种cookie的信息
      

鉴权

image-20230211105550005

SSO单点登录

单点登录(Single Sign-On,缩写为 SSO)是一种用户认证方式,使用一个凭证(如用户名和密码)即可登录多个相关系统。这样,用户只需要登录一次就可以在多个系统中访问所需的资源,而不需要在每个系统上进行独立登录。

单点登录通常用于组织内部的系统,如企业内部的人力资源系统、财务系统等。它的好处在于简化了用户登录过程,提高了用户体验,并且提高了安全性。

实际应用

XHR

image-20230211153030107

Fetch

image-20230211153051629

Node

HTTP/HTTPS

  • 默认模块,无需安装其他依赖
  • 功能有限/不是十分友好

axios

  • 支持浏览器、nodejs环境
  • 丰富的拦截器

网络优化

image-20230211153308004

image-20230211153414258

  • 重试是保证稳定的有效手段,但是要防止加剧恶劣情况
  • 缓存合理使用,作为最后的一道防线

了解更多

通信方式

WEbSocket

  • 浏览器与服务器进行全双工通讯的网络技术
  • 典型场景:实时性要求高,例如聊天室
  • URL使用ws://或wSs:/等开头

传输层UDP

QUIC(目前不适合大规模应用)

  • QUIC:Quick UDP Internet Connection
  • O-RTT建联(首次建联除外)。
  • 类似TCP的可靠传输。
  • 类似TLS的加密传输,支持完美前向安全。
  • 用户空间的拥塞控制,最新的BBR算法。
  • 支持h2的基于流的多路复用,但没有TCP的HOL问题。
  • 前向纠错FEC。
  • 类似MPTCP的Connection migration。

image-20230211153755036