这是我参与「第五届青训营」笔记创作活动的第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,最后修改时间(前者位于请求,后者位于响应)
缓存的一般处理流程如下图:
Cookie
| 请求头 | Description | ||
|---|---|---|---|
| Name=value | 各种cookie的名称和值 | ||
| Expires=Date | Cookie 的有效期,缺省时Cookie仅在浏览器关闭之前有效。 | ||
| Path=Path | 限制指定Cookie 的发送范围的文件目录,默认为当前 | ||
| Domain=domain | 限制cookie生效的域名,默认为创建cookie的服务域名 | ||
| secure | 仅在HTTPS 安全连接时,才可以发送Cookie | ||
| HttpOnly | JavaScript 脚本无法获得Cookie | ||
| SameSite=[None | Strict | Lax] | 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通过握手、确认建立连接,随后通过设置以不同方式结束连接:
QUIC: Quick UDP Internet Connection
- 0-RTT 建联(首次建联除外)
- 类似TCP的可靠传输。
- 类似TLS的加密传输,支持完美前向安全
- 用户空间的拥塞控制,最新的BBR算法。
- 支持h2的基于流的多路复用,但没有TCP的HOL问题。
- 前向纠错FEC。
- 类似MPTCP的Connection migration。
三、实践练习例子:
例子已经在文章中举出。
四、课后个人总结:
本章的知识点需要大量的实例和参考资料来辅助理解。
五、引用参考:
我主要是基于老师讲解提供的代码仓库进行理解和分析,并记录了自己的心得。