Get Started. It's Free
or sign up with your email address
http 2.0 by Mind Map: http 2.0

1. 历史

1.1. http历史

1.1.1. 构建在TCP之上

1.1.2. 3次握手,1.5RTT延迟

1.1.2.1. 导致无法复用,每次新连接都需要握手

1.1.2.1.1. 解决方式

1.1.3. TCP启动初期慢启动,如果带宽稳定在慢慢提高流量

1.1.3.1. 导致大文件请求慢

1.1.4. head of line blocking

1.1.4.1. 同时发出多个请求,服务器只能一个一个处理,如果第一个无法返回,会导致后续请求无法发出,无法复用

1.1.4.1.1. 解决方式

1.1.5. Domain sharding

1.1.5.1. 解决同一个domain同时加载资源的限制

1.1.5.1.1. 域分片是一种通过欺骗浏览器打开比通常允许的更多同时连接来加速页面加载时间的技术。 这是一个广泛使用的优化策略,使浏览器能够更好地使用高带宽的互联网连接。

1.1.5.2. 不适合mobile,因为tcp需要3次握手,延迟高于桌面,内存和CPU同样也是考虑因素

1.2. 2015年5月以RFC 7540正式发表

1.3. HTTP/2的标准化工作由Chrome、Opera、Firefox[6]、Internet Explorer 11、Safari、Amazon Silk及Edge等浏览器提供支持

2. 比较

2.1. 与1.1比较

2.1.1. HTTP/2: the Future of the Internet | Akamai

3. 特点

3.1. 多路复用

3.2. HPACK 算法

3.2.1. 用于对HTTP头部做压缩

3.3. 服务器推送

3.4. 二进制分帧

3.4.1. .

4. Mixed Content

4.1. HTTPS 网页中加载的 HTTP 资源被称之为 Mixed Content(混合内容),不同浏览器对 Mixed Content 有不一样的处理规则

4.1.1. 现代浏览器

4.1.1.1. Chrome

4.1.1.2. Firefox

4.1.1.3. Safari

4.1.1.4. Microsoft Edge

4.1.2. 分类

4.1.2.1. Optionally-blockable

4.1.2.1.1. 包含那些危险较小,即使被中间人篡改也无大碍的资源

4.1.2.2. Blockable

4.1.3. 移动端所有的Mixed Content都可以加载

4.1.3.1. iOS 9 以下的 Safari,以及 Android 5 以下的 Webview,默认会加载

4.1.3.2. Android 各版本的 Chrome,iOS 9+ 的 Safari,Android 5+ 的 Webview,默认不会加载

4.1.4. 强制只加载https的资源

4.1.4.1. HTTP 响应头方式: Content-Security-Policy: block-all-mixed-content

4.1.4.2. <meta> 标签方式: <meta http-equiv="Content-Security-Policy" content="block-all-mixed-content">

4.1.5. 让浏览器帮忙做转换

4.1.5.1. upgrade-insecure-requests

4.1.5.1.1. 页面所有 HTTP 资源,会被替换为 HTTPS 地址再发起请求

4.1.5.1.2. 页面所有站内链接,点击后会被替换为 HTTPS 地址再跳转

4.1.5.2. HTTP 响应头方式: Content-Security-Policy: upgrade-insecure-requests

4.1.5.3. <meta> 标签方式: <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

4.1.6. 在网站全站 HTTPS 后,如果用户手动敲入网站的 HTTP 地址,或者从其它地方点击了网站的 HTTP 链接,依赖于服务端 301/302 跳转才能使用 HTTPS 服务。而第一次的 HTTP 请求就有可能被劫持,导致请求无法到达服务器,从而构成 HTTPS 降级劫持。

4.1.6.1. 这个问题可以通过 HSTS(HTTP Strict Transport Security,RFC6797)来解决。HSTS 是一个响应头,格式如下: Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]

4.1.6.1.1. max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过 HTTPS 协议来访问。也就是对于这个网站的 HTTP 地址,浏览器需要先在本地替换为 HTTPS 之后再发送请求

4.1.6.1.2. includeSubDomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过 HTTPS 协议来访问。