进军--HTTP协议 !| 青训营笔记

57 阅读4分钟

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

1. 初识HTTP(一种无状态的协议)

什么是HTTP

超文本传输协议

当在浏览器中输入地址栏后按下会出,发生了什么?

首先,浏览器处理用户输入信息,根据最终得到的url字符串请求相应的服务器。接着拿到服务器返回的数据。最终解析数据,渲染页面

响应报文 image.png

请求报文 image.png 请求接口时的方法

  • GET: 用于获取数据
  • POST: 将数据提交到指定的资源,通常导致在服务器上的状态变化或者副作用
  • PUT: 用请求有效载荷替换目标资源的所有表示
  • DELETE: 删除指定的资源
  • 剩下的一些方法 image.png

安全性和幂等性 安全性(safe): 不会修改服务器数据的方法 GET HEAD OPTIONS 幂等性(Idempotent): 同样的请求被执行一次与被执行多次的效果是一样的,服务器的状态也是一样的,所有safe的方法都是幂等的 GET HEAD OPTIONS PUT DELETE

HTTP响应状态码

  • 500: 服务器内部发生了不可预期的错误
  • 504:GatWay Timeout 网关或者代理的服务器无法在规定的时间内获取期望的响应

RESTful API

一种API的设计风格

  • 每一种URL代表一个资源
  • 客户端与服务器之间,传递这种资源的某种表现层
  • 客户端通过HTTP method,对服务器端资源进行操作,实现表现层状态转化

2.报文

常用的请求头 image.png 常用响应头 image.png

3.缓存

image.png 强缓存

如果本地有期望使用的资源,就直接使用

强缓存中的字段

  • Expires: 时间戳 ,资源到期时间
  • Cache-Contrl
    • 可缓存性
      • no-cache: 可以使用缓存,但是需要进行协商缓存验证
      • no-store: 不使用任何缓存
    • 到期
      • max-age: 单位是秒,存储的最大周期,相对于请求的时间
    • 重新验证
      • must-revalidate: 一旦资过期,在向原始服务器验证之前,不能使用。 场景:如果客户端与服务器断开连接,如果不设置该字段,在客户端本地有数据存储的前提下,是可以使用的,但是如果设置了该字段,在未向原始服务器验证之前,不能使用

协商缓存

  • Etag(response)/If-None-Match(request): 资源的特定版本的标识符 (字符串)
  • Last-Modified(response) / If-Modified-Since(request): 最后修改的时间 期望使用的资源在本地存在,但是无法保证其是否是最新的资源,需要和服务器通信验证

3.cookie

Set Cokie -- response

相关属性(键值对的形式)

  • Name: 各种cookie的名称
  • Expires: cookie的有效期,缺少时cookie仅在关闭浏览器之前有效
  • Path: 限制指定cookie的发送范围的文件目录,默认为当前
  • Domain: 限制cookie生效的域名,默认为创建cookie的服务域名
  • secure: 仅在HTTPS安全连接时,才可以发送cookie
  • HttpOnly: JS脚本无法获得 cookie
  • SameSite = [None | Strict |Lax]
    • None: 同站,跨站都可以发送
    • Strict: 仅在同站时发送
    • Lax: 允许与顶级导航一起发送,并将与第三方网站发起的GET请求一起发送

4. HTTP/2---更快、更稳定、更简单

HTTP/2的特点

  • HTTP/2以 帧(frame) 作为最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流
  • 在帧的传输过程中,内容用二进制编码的形式,比 HTTP/1 中使用纯文本的形式更快
  • 各个帧可以交错发送,接收方重组织
  • 连接是永久的,而且仅需要每个来源一个连接(这和无状态不冲突)
  • 存在流控制: 阻止发送方向接收方发送大量数据的机制
  • 服务器能够主动推送给接收方一些相关相关的信息

5. HTTPS的概述

  • 经过TSL/SSL加密
  • 对称加密: 加密和解密都是使用同一个密钥
  • 非对称加密: 加密和解密需要不同的密钥 公钥 和 私钥
  • 混用对称加密和非对称加密
  • 具体步骤
    • 浏览器发送一个https的请求。服务器端接收到请求后,会首先返回一些包含密钥的证书,浏览器检查证书是否合法
    • 将公钥提取,生成随机数,通过公钥加密随机数,向服务器端传输加密后的随机数。服务器端通过私钥对随机数解密
    • 服务器端通过传入随机数的对称加密,对数据进行加密之后传输给浏览器
    • 浏览器通过本地存储的随机数进行对数据的解密