http2 技术整理 nginx 搭建 http2 wireshark 抓包分析 server push 服务端推送
使用 nginx 搭建一个 http2 的站点,准备所需:
1,域名 .com .net 均可(国内域名需要 icp 备案)
2,云主机一个,可以自由的安装配置软件的服务器
3,https 证书
http2 基于 https ,所以先配置好 https 访问
本文以 CentOS 6.5 (以下教程针对有 linux 使用基础的人,本文不会介绍 ,安装 编译环境,yum 软件包,这种基础的东西)
购买 https 证书,淘宝上就可以买,价格几十到几千不等。
使用源码编译安装 nginx http://nginx.org/en/download.html
使用目前的最新版 nginx-1.14.2.tar.gz
nginx http2 模块支持,需要用到 >= openssl 1.0.2 http://nginx.org/en/docs/http/ngx_http_v2_module.html
先下载一个 openssl-1.0.2j.tar.gz 解压
开始编译 nginx 并启用 ssl http2 模块
./configure --with-debug --with-http_ssl_module --with-http_v2_module --prefix=/usr/local/nginx/ --with-openssl=/home/openssl-1.0.2j
make && make install
运行 nginx -V 查看版本及支持
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.2j 26 Sep 2016
TLS SNI support enabled
配置 ssl http2
/usr/local/nginx/conf/ssl
将购买的证书放到这里
xxx.com.key xxx.com.pem
nginx.conf
listen ssl http2; # .1版本后这样写
server_name www.xxx.com; #填写绑定证书的域名
ssl_certificate /usr/local/nginx/conf/ssl/xxx.com.pem; # 指定证书的位置,绝对路径
ssl_certificate_key /usr/local/nginx/conf/ssl/xxx.com.key; # 绝对路径,同上
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1. TLSv1.; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
使用 火狐浏览器访问(火狐可以更好的显示出来头信息)
添加 php7 fpm 支持
apache2.4 http2 支持
./configure 时添加参数 --enable-http2 --with-ssl=/usr/local/openssl1.0.2
修改 httpd.conf
LoadModule http2_module modules/mod_http2.so
在已经配置好 https 的基础上添加
<VirtualHost _default_:443>
Protocols h2 http/1.1
使用 wireshark 抓包分析
有2种方法
1,使用 浏览器导出 TLS 信息,即可解码,比较简单不做介绍
2,使用服务器私钥解密,优点是不依赖浏览器,普通程序也可以解密,如使用 libcurl okhttp 加密TLS流量
先配置 RSA keys list ,添加上服务器私钥。
IIS .pfx 格式证书需要填写密码
Nginx Apache .key 格式证书不需要密码
Tomcat .jks 格式证书不支持,需要转换为 .key
然后打开浏览器访问站点,查看分析数据包,已解密
使用 tcpdump 抓包 tcp 并保存为文件
tcpdump tcp -s 0 -c 1000 -w http2.cap
运行 curl 测试程序 后使用 wireshark 进行分析
linux 上面的 curl 不支持 http2 ,ubuntu 18 已经支持了。如果不支持,需要先编译安装 ngnttp2 这个库以后,在编译安装新版的 curl 即可支持。
win 方便的 curl 测试工具非常方便,其实就是大名鼎鼎的 git windows 客户端 https://git-scm.com/download/win 安装后,打开 Git Bash 输入 curl -V
$ curl -V
curl 7.61. (i686-w64-mingw32) libcurl/7.61. OpenSSL/1.0.2p (WinSSL) zlib/1.2. libidn2/2.0. nghttp2/1.33.
Release-Date: --
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz TLS-SRP HTTP2 HTTPS-proxy MultiSSL Metalink
curl 发送 post :
curl https://www.xxx.com/test_post.php -X POST -d "title=comewords&content=articleContent"
curl 发送 json post:
https://www.xxx.com/test_post.php -H "Content-Type:application/json" -X POST -d '{"title":"comewords","content":"articleContent"}'
curl 上传文件:
curl http://www.xxx.com/test_post.php -F "file1=@1.txt" -F "file2=@2.txt"
HTTP2 协议详解
使用 window git bash 中的 curl 进行测试 使用不同的 --http1.1 --http2 协议
头信息
Header: :method: GET
Header: :path: /
Header: :scheme: https
Header: :authority: www.xxx.com
Header: user-agent: curl/7.61.
Header: accept: */*
头信息多了几个,同时也少了一些东西,对比 HTTP1.1
GET / HTTP/1.1\r\n
Host: www.xxx.com\r\n
User-Agent: curl/7.61.\r\n
Accept: */*\r\n
服务器推送 server push
使用 nginx 配置服务器推送
#server push
location /push/index.html {
http2_push /push/.css
http2_push /push/.css
}
当访问 /push/index.html 时推送2个 css 。
使用 chrome 访问。
使用 nghttp 进行测试
先安装 sudo apt-get install nghttp2-client
nghttp -ans https://www.xxx.com/push/index.html
id responseEnd requestStart process code size request path
+.17ms +166us .00ms /push/index.html
+.53ms * +.58ms 946us /push/.css
+.63ms * +.79ms 840us /push/.css
重点 http2 连接复用
利用 http2 连接可以复用的支持,可以实现 HTTP 长连接,类似于 HTML5 WebSocket ,服务端可以向客户端推送消息,不必每次建立连接。
服务端如何实现:
和PHP实现文件限速下载,比较类似,每次只读一定的长度,在做 sleep ,就实现了限速下载,下载一个文件可能要一天时间。
实现好了,效果如下,每3秒钟,输出当前时间
http2 ping
ALPN 在 SSL hello 时发送
Server Hello
openssl 支持 ALPN 的方法,较简单,版本要求 >= 1.0.2
const unsigned char *alpn = NULL;
unsigned int alpnlen = ;
SSL_get0_next_proto_negotiated(ssl, &alpn, &alpnlen);
SSL_get0_alpn_selected(ssl, &alpn, &alpnlen);
http2 流量控制
首次服务器发送 window_update 有几个设置。
frame size 16k / windows size 64k
当客户端从服务器接收一个流时,服务器会检查协商的 window 大小,当大小不足时,就不在发送数据,这时客户端需要更新 window 大小。如上图所示,初始值是 64K 当客户端接收的数据达到这个值时,则需要更新 window 。
window 更新为 32768 则 32k 。服务器收到后,更新 window 大小,又可以继续下发流了。这里有2次更新,对应2个 stream id 。
http2 技术整理 nginx 搭建 http2 wireshark 抓包分析 server push 服务端推送的更多相关文章
- Wireshark抓包分析/TCP/Http/Https及代理IP的识别
前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...
- 使用wireshark抓包分析-抓包实用技巧
目录 使用wireshark抓包分析-抓包实用技巧 前言 自定义捕获条件 输入配置 输出配置 命令行抓包 抓取多个接口 抓包分析 批量分析 合并包 结论 参考文献 使用wireshark抓包分析-抓包 ...
- Http实战之Wireshark抓包分析
Http实战之Wireshark抓包分析 Http相关的文章网上一搜一大把,所以笔者这一系列的文章不会只陈述一些概念,更多的是通过实战(抓包+代码实现)的方式来跟大家讨论Http协议中的各种细节,帮助 ...
- 用Wireshark抓包分析超过70秒的请求
超过70秒的请求是通过分析IIS日志发现的: 10.159.63.104是SLB的内网IP. 通过Wireshark抓包分析请求是9:22:21收到的(tcp.stream eq 23080): 09 ...
- Wireshark抓包分析HTTPS与HTTP报文的差异
一.什么是HTTPS: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换 ...
- wireshark 抓包分析 TCPIP协议的握手
wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...
- wireshark抓包分析工具的使用
# wireshark抓包分析工具的使用 ## 常用抓包指令 - `ip.src==192.168.60.26 and ip.dst==111.7.187.220 and tcp.port == 80 ...
- Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析
Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...
- wireshark抓包分析——TCP/IP协议
本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...
随机推荐
- Leetcode_开篇碎碎念
已经计划写leetcode3天了,但是到目前为止一道题还没有写,执行力我太差了. 写leetcode的原因有两个,一是锻炼自己代码水平,提高实力:二是考研据了解到的都会有上机考试,基本是c++,jav ...
- 吴裕雄--天生自然python学习笔记:python文档操作自动查找替换 Word 文件中的指定文字
Win32com 组件提供了自动替换 Word 文件中指定文字 的功能 .在使用“查找” 功能替换文字之前,可先清除源文字及目标文字的格式,以免影响替换效果,语法为 : 替换 Word 文件特定文字的 ...
- 2019ICPC南京网络赛B super_log(a的b塔次方)
https://nanti.jisuanke.com/t/41299 分析:题目给出a,b,mod求满足条件的最小a,由题目的式子得,每次只要能递归下去,b就会+1,所以就可以认为b其实是次数,什么的 ...
- go proxy转发工作中碰到的问题
A-B 需求是一个中转 A-Proxy-B 读取来源请求A,在proxy读取body作些处理,再转给B,再把返回内容转给A 问题出在proxy这里 如果先把请求给B,再读body res, err : ...
- ZOJ-4089-Little Sub and Isomorphism Sequences
给定你个数组,以及一些单点修改,以及询问,每次询问需要求得,最长的字串长度,它在其他位置存在同构. 当存在两个不相交的区间同构时,如: 1.2.…….n -1.n.n + 1.…….m.m + 1.m ...
- labview相关内容
索引数组的用法:https://jingyan.baidu.com/album/90808022e6d0f7fd91c80fd2.html?picindex=1 定时顺序结构用法:http://zon ...
- 转: zabbix3.2.1安装graphtrees插件
转自 : http://blog.csdn.net/liang_baikai/article/details/53542317 graphtree介绍 由于zabbix的图像显示一块不太友好,图像没法 ...
- 变身六次失去核心的小米Note还能火吗
奥特曼变身有时间限制,因此我们总是希望它多变几次身,从而把小怪兽打得嗷嗷叫.但对于科技产品来说,不断推出"变身版",似乎总有江河日下.大势已去之感.三星形形色色的复仇者联盟S6版, ...
- 安卓权威编程指南 挑战练习(第26章 在 Lollipop 设备上使用 JobService)
26.11 挑战练习:在 Lollipop 设备上使用 JobService 请创建另一个 PollService 实现版本.新的 PollService 应该继承 JobService 并使用 Jo ...
- 做直播能有多赚钱,Python告诉你
前面我们介绍了APP爬虫环境的搭建和mitmproxy工具的简单使用,这次我们要来一个简单的APP爬虫,尝试一下APP爬虫的简单实用,顺便让我们看看喜马拉雅上的主播到底有多赚钱. APP爬虫一般分为两 ...