http 进化史
超文本:以一种无约束的方式联系起来的人类可读信息
超媒体:表示“不限于文本”
HTTP/0.9
只有get()
没有首部
仅获取HTML(没有图片,只有文本)
HTTP/1.0
首部
响应码
重定向
错误
条件请求
内容编码(压缩)
更多的请求方法
不能让多个请求共用一个连接
缺少强制的 Host 首部
缓存的选择相当简陋
HTTP/1.1
缓存相关首部的扩展
OPTIONS 方法
Upgrade 首部
Range(范围)请求
压缩和传输编码
管道化:允许客户端一次发送所有的请求
SPDY
多路复用
帧
首部压缩
HTTP/2
HTTP/2 快速入门
- 下载并安装一张 TLS 证书,让浏览器和服务器通过 h2 连接
使用在线资源:https://www.sslchecker.com/csr/self_signed
私钥:privkey.pem
证书:cert.pem
自己创建一张证书
openssl genrsa -out key.pem 2048
openssl req -new -x509 -sha256 -key privkey.com -out cert.pem -days 365 -subj "/CN=fake.example.org"
- 从数字证书认证机构(CA)申请一张证书
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto certonly --webroot -w <your web root> -d <your domain> # 执行 certbot-auto
新制作的证书和私钥会被放到 /etc/letsencrypt/live/yoursite.com
- 获取并安装一个支持 h2 的 web 服务器(nghttp2)
# Ubuntu 16
sudo apt-get install nghttp2
./nghttp2 -v -d <webroot> <port> <key> <cert>
./nghttp2 -v -d /usr/local/www 8443 /etc/letsencrypt/live/yoursite.com/privkey.pem /etc/letsencrypt/live/yoursite.com/cert.pem
web 优化“黑魔法”的动机与方式
剖析 Web 页面请求
关键性能指标
依赖网络
延迟:延迟是指 IP 数据包从一个网络端点到另一个网络端点所花费的时间。与之相关的是往返延时(RIT), 是延迟时间的2倍
带宽:依据引用资源的大小和网络连接的传输能力
DNS 查询:一个域名只需转换一次
建立连接时间:TCP 三次握手
TLS 协商时间:额外的往返传输
依赖页面内容及服务器性能
首字节时间
内容下载时间
开始渲染时间
文档加载完成时间
更多的字节
更多的资源
更高的复杂度
更多的域名
更多的TCP socket
HTTP/1 的问题
队头阻塞
低效的TCP利用
TCP避免拥塞机制:即使在最差的网络状况下仍能起作用,并且如果有需求冲突也保证相对公平。
拥塞窗口:在接收方确认数据包之前,发送方可以发出的 TCP 包的数量。例如拥塞窗口指定为1,发送方发出1个数据包之后,只有接收方确认了那个包,才能发送下一个