初识HTTP协议(2) | 青训营笔记

78 阅读4分钟

这是我参与「第五届青训营」笔记创作活动的第14天。今天记录老师讲解的HTTP协议相关知识。HTTP协议在计算机网络课程中有所接触,在进行web交互上发挥了重要作用。今天继续从理论上去了解HTTP协议。

一、本堂课重点内容:

HTTP协议。

二、详细知识点介绍:

HTTP中的缓存机制

HTTP协议中的缓存主要分为 强缓存 和 协商缓存。两种缓存对应着不同的报文字段。

强缓存

  • Expires,时间戳
  • Cache-Control
    • 可缓存性
      • no-cache: 协商缓存验证
      • no-store: 不使用任何缓存
    • 到期
      • max-age: 单位是秒,存储的最大周期,相对于请求的时间
    • 重新验证 * 重新加载
      • must-revalidate: 一旦资源过期,在成功向原始服务器验证之前,不能使用

协商缓存

  • Etag/lf-None-Match,资源的特定版本的标识符,类似于指纹
  • Last-Modified/If-Modified-Since,最后修改时间(前者位于请求,后者位于响应)

缓存的一般处理流程如下图:

image.png

Cookie

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

HTTP/2 更快、更稳定、更简单

帧(frame):HTTP/2通信的最小单位。每个帧都包含帧头,至少也会标识出当前帧所属的数据流。这些帧不需要按照逻辑顺序发送,可以结合实际情况交错发送,接收方利用帧头部的信息重新组织顺序。

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

数据流:已建立的连接内的双向字节流可以承载一条或多条消息。

流控制:阻止发送方向接收方发送大量数据的机制。

HTTP/2 连接都是永久的。而仅需要每个来源一个连接。

HTTPS 概述

HTTPS(Hypertext Transfer Protocol Secure)是经过了 TSL/SSL 加密的超文本传输协议。

对称加密:加密和解密都是使用同一个密钥

非对称加密:加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)

静态资源方案:缓存+CDN+文件名hash

CDN:Content Delivery Network

通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。

跨域

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-ControlAllow-Headers
  • Access-Contro-Request-Method
  • Access-Contro-Request-Headers

代理服务器 同源策略是浏览器的安全策略,不是HTTP的。

Iframe 诸多不便

websocket

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

和HTTP协议通过Request和Response建立连接、结束连接不同,websocket通过握手、确认建立连接,随后通过设置以不同方式结束连接:

image.png

QUIC: Quick UDP Internet Connection

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

三、实践练习例子:

例子已经在文章中举出。

四、课后个人总结:

本章的知识点需要大量的实例和参考资料来辅助理解。

五、引用参考:

我主要是基于老师讲解提供的代码仓库进行理解和分析,并记录了自己的心得。