本篇文章给大家谈谈jd网站源码分享,以及dz网站源码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
前些日子将自己的网站升级为HTTPS,这次再设置支持HTTP2.0。本篇文章不讲述HTTP2的具体原理,但关于HTTP的相关知识会简单讲述一下,关于HTTP2的详细内容可以参看HTTP2基础教程。
1.HTTP1
1.1HTTP1的问题
队头阻塞如果仅仅使用一个连接,它需要发起请求、等待响应,之后才能发起下一个请求。在请求应答过程中,如果出现任何状况,剩下所有的工作都会被阻塞在那次请求应答之后。这就是“队头阻塞”,它会阻碍网络传输和Web页面渲染,直至失去响应。为了防止这种问题,现代浏览器会针对单个域名开启6个连接,通过各个连接分别发送请求。它实现了某种程度上的并行,但是每个连接仍会受到“队头阻塞”的影响。低效的TCP利用HTTP1并不支持多路复用,TCP协议保证连接都能正常工作,但是不能保证它们的性能是最优的。臃肿的消息首部虽然h1提供了压缩被请求内容的机制,但是消息首部却无法压缩。受限的优先级设置浏览器能指定优先级的方式是有限的:要么发起请求,要么不发起。浏览器为了先请求优先级高的资源,会推迟请求其他资源。但是优先级高的资源获取之后,在处理的过程中,浏览器并不会发起新的资源请求,所以服务器无法利用这段时间发送优先级低的资源,总的页面下载时间因此延长了。第三方资源很多第三方资源都不在Web开发者的控制范围内,所以很可能其中有些资源的性能很差,会延迟甚至阻塞页面渲染。
1.2HTTP1优化
基础不牢,地动山摇。为了优化HTTP1,开发人员们最大化的发挥了自己的聪明才智。
如SteveSouders这种大牛,写了《高性能网站建设指南》和姊妹篇《高性能网站建设进阶指南》,堪称Web性能科学的奠基之作。
开发人员们也想出了各种实用方案,经常使用的Web性能优化技术有:
DNS查询优化优化TCP连接(可以参考我的这篇文章TCP性能优化)避免重定向客户端缓存网络边缘的缓存条件缓存压缩和代码极简化避免阻塞CSS/JS图片优化
还有一些反模式的方案
生成精灵图和资源合并/内联域名拆分禁用cookie的域名
我们做这一切,不管多么麻烦多么艰辛,主要是为了优化性能,填HTTP1给我们埋的坑,虽然治标不治本。幸运的是,HTTP2来了。
2.HTTP2
2.1HTTP2优点
1.二进制协议
HTTP/2采用二进制格式而非文本格式方便机器解析,但是肉眼识别起来比较困难
2.HTTP/2是完全多路复用的,而非有序并阻塞的
只需一个连接即可实现并行提升TCP连接的利用率
3.首部压缩
HTTP/2的首部被深度压缩显著减少传输中的冗余字节
4.HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
2.2HTTP2部署
2.2.1部署前
现在让我们看看没有升级前,https://www.asap2me.top/显示的结果
Chrome显示协议为http/1.1
2.2.2部署
2.2.2.1环境情况:
目前环境是:Centos7.6
Web服务:GoLang
Web服务端口号:8080
反向代理:Nginx
系统已经配置好Nginx,也支持HTTPS,关于如何安装Nginx和配置HTTPS可以参考HTTPS配置实战
2.2.2.2部署分为两步:
获取并安装一个支持h2的Web服务器;下载并安装一张TLS证书,让浏览器和服务器通过h2连接。申请TLS证书方法有使用在线证书生成器https://www.sslchecker.com/csr/self_signed自签名证书openssl工具Let&/sec](mean)\nTimeperrequest:30.967[ms](mean)\nTimeperrequest:3.097[ms](mean,acrossallconcurrentrequests)\nTransferrate:55.17[Kbytes/sec]received\n\nConnectionTimes(ms)\nminmean[+/-sd]medianmax\nConnect:019.50121\nProcessing:25303.030266\nWaiting:25303.030266\nTotal:253110.030266\n\nPercentageoftherequestsservedwithinacertaintime(ms)\n50%30\n66%30\n75%31\n80%31\n90%32\n95%33\n98%35\n99%115\n100%266(longestrequest)
2.3.2HTTP2性能
使用h2load对HTTP2进行压力测试:
h2load-n10000-c6-T180https://www.asap2me.top/
h2load-n10000-c10-T180https://www.asap2me.top/\nstartingbenchmark…\nspawningthread#0:10totalclient(s).10000totalrequests\nTLSProtocol:TLSv1.2\nCipher:ECDHE-RSA-AES128-GCM-SHA256\nServerTempKey:ECDHP-256256bits\nApplicationprotocol:h2\nprogress:10%done\nprogress:20%done\nprogress:30%done\nprogress:40%done\nprogress:50%done\nprogress:60%done\nprogress:70%done\nprogress:80%done\nprogress:90%done\nprogress:100%done\n\nfinishedin31.71s,315.37req/s,27.74KB/s\nrequests:10000total,10000started,10000done,10000succeeded,0failed,0errored,0timeout\nstatuscodes:100002xx,03xx,04xx,05xx\ntraffic:879.55KB(900660)total,585.94KB(600000)headers(spacesavings47.37%),117.19KB(120000)data\nminmaxmeansd+/-sd\ntimeforrequest:26.66ms262.63ms29.48ms3.05ms98.04%\ntimeforconnect:97.46ms106.95ms99.53ms3.16ms80.00%\ntimeto1stbyte:127.59ms141.29ms130.75ms4.77ms80.00%\nreq/s:31.5435.4133.821.1480.00%
HTTP1.1和HTTP2压测后,在总时间上差别不大,主要是因为测试的接口不合适。不过我们仍能看出,在机器CPU和流量上,HTTP2是有大幅提升的。
2.3.3注意问题
将服务升级为支持HTTP2.0,需要考虑如下问题:
浏览器的支持情况:目前主流浏览器都支持h2,如果不支持,会自动退回到h1,所以问题不大。迁移到TLS:服务器需要支持TLS1.2或更高版本,以及一组特定的临时加密算法。因为大多数关注安全的现代网站已经被“TLS无处不在”的大潮所席卷,所以应该不成问题。撤销针对HTTP/1.1的“优化”:这部分是工作量最大的一部分第三方资源:第三方资源有可能会拖累HTTP/2带来的任何可能的性能优化,需要判断是否真的需要第三方资源。支持旧版本客户端:需要确保TLS设置方式以及是否仍然能够支持HTTP/1,否则有用户可能彻底失去了通过h1访问网站的机会
3.插曲
写文章的过程中,突然报这个错误,还以为配置的问题,后来发现是需要备案。
大家如果在腾讯云买的域名,备案方法:https://icp-faq.dnspod.cn/why
4.总结
如果是新的服务,建议一开始就部署HTTP2,对于老的服务,也推荐升级为HTTP2。对于性能测试,推荐一个网站https://www.webpagetest.org/。
写博客是一个好事情,写完这个文章,至少又有几点值得写:
HTTP2技术细节多路复用的实现服务端推送实现webpagetest使用
下一篇文章可以写写多路复用的具体实现。
资料
HTTP2基础教程http://www.duokan.com/book/172822为啥我的Chrome中看不到http请求的版本号?https://segmentfault.com/q/1010000022855148nginx配置支持http2https://www.cnblogs.com/chennl/p/10173397.htmlnginx支持HTTP2的配置过程https://www.cnblogs.com/bugutian/p/6628455.htmlNginx支持Http2协议https://blog.csdn.net/jeikerxiao/article/details/85329165HTTP2.0PKHTTP1.X——速度与激情https://www.sohu.com/a/237152034_827544ab命令压力测试https://www.cnblogs.com/yueminghai/p/6412254.htmlh2load-HTTP/2benchmarkingtool-HOW-TOhttps://nghttp2.org/documentation/h2load-howto.htmlWeb性能优化工具WebPageTest(一)——总览与配置
最后
大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)
我的个人博客为:https://shidawuhen.github.io/
往期文章回顾:
技术
Go设计模式(1)MySQL开发规范HTTPS配置实战Go通道实现原理Go定时器实现原理HTTPS连接过程限流实现2秒杀系统分布式系统与一致性协议微服务之服务框架和注册中心Beego框架使用浅谈微服务TCP性能优化限流实现1Redis实现分布式锁Golang源码BUG追查事务原子性、一致性、持久性的实现原理CDN请求过程详解常用缓存技巧如何高效对接第三方支付Gin框架简洁版InnoDB锁与事务简析算法总结
读书笔记
原则资治通鉴敏捷革命如何锻炼自己的记忆力简单的逻辑学-读后感热风-读后感论语-读后感孙子兵法-读后感
思考
服务端团队假期值班方案项目流程管理对项目管理的一些看法对产品经理的一些思考关于程序员职业发展的思考关于代码review的思考Markdown编辑器推荐-typora
关于jd网站源码分享,dz网站源码的介绍到此结束,希望对大家有所帮助。
