HTTP 协议:Hyper Text Transfer Prototcal,超文本传输协议,在计算机网络中属于应用层协议,基于传输层的 TCP 协议。特点有基于请求返回响应、简单可扩展、无状态。
HTTP 协议工作流程
HTTP 协议的发展
HTTP 报文分析
Method
安全的(safe)Method:不会修改服务器的数据的方法:GET、HEAD、OPTIONS幂等的(idempotent)Method:同样的请求被执行一次与连续执行多次效果是一样的,服务器的状态也是一样的,所有 safe 的方法都是 idempotent 的:GET、HEAD、OPTIONS、DELETE
状态码
RESTful API
常用请求头
常用响应头
缓存
缓存使用过程
cookie
cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能cookie 主要用于以下三个方面:
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)个性化设置(如用户自定义设置、主题等)浏览器行为跟踪(如跟踪分析用户行为等)
HTTP/2
更快、更稳定、更简单帧是 HTTP/2 通信的最小单位,每个帧都包含帧头,也会标识出当前帧所属的数据流二进制编码(HTTP1.x 的解析是基于文本的)header 压缩,HTTP/2使用 encoder 来减少需要传输的header大小,通讯双方各自 cache 一份 header fields 表,既避免了重复header的传输,又减小了需要传输的大小交错发送,接收方重组织消息:与逻辑请求或响应消息对应的完整的一系列帧数据流:已建立的连接内的双向字节流,可以承载一条或多条消息HTTP/2 连接都是永久的,而且仅需要每个来源一个连接流控制:阻止发送方向接收方发送大量数据的机制
HTTPS:Hypertext Transfer Protocol Secure
经过 TSL/SSL 加密对称加密:加密和解密都是使用同一个密钥;非对称加密:加密和解密需要使用公钥和私钥两个不同的密钥HTTPS 协议使用对称加密和非对称加密混用的加密方法
HTTP 常见场景
静态资源
静态资源解决方案:缓存 + CDN + 文件名hashCDN(Content Delivery Network):通过用户就近性和服务器负载的判断,CDN 确保内容以一种极为高效的方式为用户的请求提供服务文件名hash 为了防止因缓存而出现的静态资源不更新的问题
跨域解决方案
CORS
代理服务器
同源策略是浏览器的安全策略,不是 HTTP 协议的
Iframe 通信,问题较多,很少使用
常见场景:网站登录后,下次进入网站怎么记录得到用户状态信息
Session + cookie (鉴权)
JWT(JSON web token)
常见场景:子应用如何做到自动登录(不同的网站,例如头条官网跳转到头条号网站,用户自动登录)
SSO(Single Sign On,单点登录)
HTTP 实际应用
浏览器 AJAX 之 XHR(XMLHttpRequest)
浏览器 AJAX 之 Fetch
XMLHttpRequest 的升级版使用 Promise模块化设计,Response,Request,Header 对象通过数据流处理对象,支持分块读取
Node 标准库之 HTTP、HTTPS
默认模块,无需安装其他依赖功能有限/不是十分友好
常用请求库之 axios
支持浏览器、node 环境内置 Promise,有丰富的拦截器
网络优化
预解析、预连接
稳定性
重试是保证稳定的有效手段,但要防止加剧恶劣情况缓存合理使用,作为最后一道防线
HTTP 扩展
WebSocket
浏览器与服务器进行全双工通讯的网络技术典型场景:实时性要求高例如聊天室,游戏等URL 使用 ws:// 或 wss:// 等开头
QUIC:Quik UDP Internet Connection 基于 UDP,应用暂不多
0-RTT 建联(首次建联除外)类似 TCP 的可靠传输类似 TLS 的加密传输,支持完美前向安全用户空间的拥塞控制,最新的 BBR 算法支持 h2 的基于流的多路复用,但没有 TCP 的 HOL 问题前向纠错 FEC类似 MPTCP 的 Connection migration



