浏览器: 服务器,请给我需要的CSS文件
服务器: Biu,发送图片中…
浏览器: 服务器,请给我需要的JS文件
服务器: Biu,发送图片中…
浏览器: 服务器,你TM的倒是给我发送我需要的CSS文件跟JS文件呀!
这个时候 HTTP 2.0 的 请求优先级 特性出场了,在每个 HTTP 2.0 的 流 里面有个 优先值 ,这个 优先值 确定着客户端跟服务器处理不同的 流 采取不同的 优先级策略 ,高优先级的应该优先发送,但这不会绝对的(绝对等待会导致 首队阻塞 问题)。在分配处理资源和客户端与服务器间的宽带,不同优先级的混合都是必须的。
5.服务器提示
一般情况下,客户端需要请求啥东西告诉服务器,然后服务器返回对应资源回到客户端,这也是请求很慢的原因之一。HTTP 2.0 新增加 服务器提示 ,可以先于客户端检测到将要请求的资源,提前通知客户端,服务器不发送所有资源的实体,只发送资源的 URL。客户端接到提示后会进行验证缓存,如果发现需要这些资源,则正式发起请求。
这个技术跟我们常用的 预加载 技术实现差不多,但 服务器提示 是通过 HTTP Link Header 和 Link Prefetching 语义重叠的部分来实现的。
Nginx 如何实现 HTTP 2.0 ?打开 Nginx官网 可以看到其中有一条新闻如下:
显然,Nginx 是已经有了一个 ngx_http_v2_module 模块用来支持 HTTP 2.0 的,但是还不是稳定版,所以想要尝鲜那就需要 手动升级Nginx 。
科普时间到此结束,下面就让我们正式进入今天的主题: 一步步实现Nginx配置HTTP 2.0。
Nginx配置HTTP 2.0正式起航下面内容有条件的同学请对比实践操作,体会更深。
我将从下面几步来介绍:
准备工作
源码安装升级 Nginx 到最新版(当前是1.9.14)
生成 SSL/TLS 安全证书
修改Nginx配置
准备工作在开始我们的任务之前,请先下载 OpenSSL,pcre,Zlib 跟 Nginx源码 ,并且全部解压到同一个目录,假设为 nginx-build,这时候的代码结构如下:
nginx-buildnginx-1.9.14
pcre-8.38
openssl-1.0.2g
zlib-1.2.8
源码安装升级 Nginx 到最新版(当前是1.9.14)
若之前用 brew 安装过 Nginx ,请先执行 brew uninstall nginx 卸载。
准备工作做好之后���打开 Terminal 切换到上面的 nginx-build 目录,然后执行下面命令编译Nginx:
# 先进入nginx源码目录cd nginx-1.9.14
# 配置Nginx源码
# --prefix:配置nginx最终安装目录,可以修改为你想要的目录
# --with-http_ssl_module 跟 --with-http_v2_module 必带,因为 HTTP 2.0 采用 HTTPS ,HTTPS 基于 SSL/TLS
sudo ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=../pcre-8.38 --with-openssl=../openssl-1.0.2g --with-zlib=../zlib-1.2.8 --with-http_v2_module
> 输入管理员密码然后回车
配置源码成功之后,为了避免 make 失败,因为我失败了(可能是人品不好…),反正我 make 的时候报了下面的错误:
所以建议大家跟我一样先修改一个配置文件,如下命令(相对于nginx-build目录):
cd nginx-1.9.14/objssudo vi Makefile
> 输入管理员密码然后回车
# 在 vi 模式下输入 '/' ,然后输入./config --prefix定位到类似我下面的片段:
# && ./config --prefix=/Users/cainengtian/Downloads/software/nginx-1.8.0/../openssl-1.0.2d/.openssl no-shared \
# 将前面的 ./config 改为 ./Congigure darwin64-x86_64-cc ,其他的不要改动, 然后保存即可