HTTP2和HTTPS来不来了解一下?

一、前言

只有光头才能变强

HTTP博文回顾:

  • PC端:HTTP就是这么简单
  • PC端:HTTP面试题都在这里
  • 微信公众号端:HTTP就是这么简单
  • 微信公众号端:HTTP面试题都在这里

本文力求简单讲清每个知识点,希望大家看完能有所收获

二、HTTP协议的今生来世

最近在看博客的时候,发现有的面试题已经考HTTP/2了,于是我就顺着去了解一下。

到现在为止,HTTP协议已经有三个版本了:

  • HTTP1.0
  • HTTP1.1
  • HTTP/2

下面就简单聊聊他们三者的区别,以及整理一些必要的额外知识点。

2.1HTTP版本之间的区别

2.1.1HTTP1.0和HTTP1.1区别

HTTP1.0和HTTP1.1最主要的区别就是:

  • HTTP1.1默认是持久化连接

在HTTP1.0默认是短连接:

mOzi8bD.png

简单来说就是:每次与服务器交互,都需要新开一个连接

zSMOHFE.png

phN7Xvv.png

试想一下:请求一张图片,新开一个连接,请求一个CSS文件,新开一个连接,请求一个JS文件,新开一个连接。HTTP协议是基于TCP的,TCP每次都要经过三次握手,四次挥手,慢启动...这都需要去消耗我们非常多的资源的!

在HTTP1.1中默认就使用持久化连接来解决:建立一次连接,多次请求均由这个连接完成!(如果阻塞了,还是会开新的TCP连接的)

F8mk0F8.png

相对于持久化连接还有另外比较重要的改动:

  • HTTP 1.1增加host字段
  • HTTP 1.1中引入了Chunked transfer-coding,范围请求,实现断点续传(实际上就是利用HTTP消息头使用分块传输编码,将实体主体分块传输)
  • HTTP 1.1管线化(pipelining)理论,客户端可以同时发出多个HTTP请求,而不用一个个等待响应之后再请求
    • 注意:这个pipelining仅仅是限于理论场景下,大部分桌面浏览器仍然会选择默认关闭HTTP pipelining!
    • 所以现在使用HTTP1.1协议的应用,都是有可能会开多个TCP连接的!

参考资料:

  • https://www.cnblogs.com/gofighting/p/5421890.html

2.1.2HTTP2基础

在说HTTP2之前,不如先直观比较一下HTTP2和HTTP1.1的区别:

  • https://http2.akamai.com/demo

TZPJgOc.gif

上面也已经说了,HTTP 1.1提出了管线化(pipelining)理论,但是仅仅是限于理论的阶段上,这个功能默认还是关闭了的。

管线化(pipelining)和非管线化的区别

bsPBD7B.jpg

qdXkYrK.png

HTTP Pipelining其实是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应!


就像在超市收银台或者银行柜台排队时一样,你并不知道前面的顾客是干脆利索的还是会跟收银员/柜员磨蹭到世界末日(不管怎么说,服务器(即收银员/柜员)是要按照顺序处理请求的,如果前一个请求非常耗时(顾客磨蹭),那么后续请求都会受到影响。

  • 在HTTP1.0中,发送一次请求时,需要等待服务端响应了才可以继续发送请求。
  • 在HTTP1.1中,发送一次请求时,不需要等待服务端响应了就可以发送请求了,但是回送数据给客户端的时候,客户端还是需要按照响应的顺序来一一接收
  • 所以说,无论是HTTP1.0还是HTTP1.1提出了Pipelining理论,还是会出现阻塞的情况。从专业的名词上说这种情况,叫做线头阻塞(Head of line blocking)简称:HOLB

2.1.3HTTP1.1和HTTP2区别

HTTP2与HTTP1.1最重要的区别就是解决了线头阻塞的问题!其中最重要的改动是:多路复用 (Multiplexing)

  • 多路复用意味着线头阻塞将不在是一个问题,允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息,合并多个请求为一个的优化将不再适用。
    • (我们知道:HTTP1.1中的Pipelining是没有付诸于实际的),之前为了减少HTTP请求,有很多操作将多个请求合并,比如:Spriting(多个图片合成一个图片),内联Inlining(将图片的原始数据嵌入在CSS文件里面的URL里),拼接Concatenation(一个请求就将其下载完多个JS文件),分片Sharding(将请求分配到各个主机上)......

使用了HTTP2可能是这样子的:

cVJ5KQk.png

HTTP2所有性能增强的核心在于新的二进制分帧层(不再以文本格式来传输了),它定义了如何封装http消息并在客户端与服务器之间传输。

YOi9xb9.png

看上去协议的格式和HTTP1.x完全不同了,实际上HTTP2并没有改变HTTP1.x的语义,只是把原来HTTP1.x的header和body部分用frame重新封装了一层而已

9oOSrWV.png

HTTP2连接上传输的每个帧都关联到一个“流”。流是一个独立的,双向的帧序列可以通过一个HTTP2的连接在服务端与客户端之间不断的交换数据。

pR5Py00.png

实际上运输时:

Izo4p2i.png

HTTP2还有一些比较重要的改动:

  • 使用HPACK对HTTP/2头部压缩
  • 服务器推送
    • HTTP2推送资料:https://segmentfault.com/a/1190000015773338
  • 流量控制
    • 针对传输中的进行控制(TCP默认的粒度是针对连接)
  • 流优先级(Stream Priority)它被用来告诉对端哪个流更重要

2.2HTTP2总结

HTTP1.1新改动:

  • 持久连接
  • 请求管道化
  • 增加缓存处理(新的字段如cache-control)
  • 增加Host字段、支持断点传输等

HTTP2新改动:

  • 二进制分帧
  • 多路复用
  • 头部压缩
  • 服务器推送

参考资料:

  • HTTP2 GitBook电子书(中文版):https://legacy.gitbook.com/book/ye11ow/http2-explained/details
  • HTTP/2.0 相比1.0有哪些重大改进?https://www.zhihu.com/question/34074946
  • HTTP/2 新特性浅析:https://segmentfault.com/a/1190000002765886
  • HTTP2学习资料:https://imququ.com/post/http2-resource.html
  • HTTP2简介和基于HTTP2的Web优化:http://caibaojian.com/toutiao/6641
  • http2原理入门:https://blog.qingf.me/?p=600
  • HTTP/2 对现在的网页访问,有什么大的优化呢?体现在什么地方?https://www.zhihu.com/question/24774343/answer/96586977
  • HTTP/2笔记之流和多路复用:http://www.blogjava.net/yongboy/archive/2015/03/19/423611.aspx

2.3HTTPS再次回顾

之前在面试的时候被问到了HTTPS,SSL这样的知识点,也没答上来,这里也简单整理一下。

首先还是来解释一下基础的东东:

  • 对称加密:
    • 加密和解密都是用同一个密钥
  • 非对称加密:
    • 加密用公开的密钥,解密用私钥
    • (私钥只有自己知道,公开的密钥大家都知道)
  • 数字签名:
    • 验证传输的内容是对方发送的数据
    • 发送的数据没有被篡改过
  • 数字证书(Certificate Authority)简称CA
    • 认证机构证明是真实的服务器发送的数据

3y的通讯之路:

  • 远古时代:3y和女朋友聊天传输数据之间没有任何的加密,直接传输
    • 内容被看得一清二楚,毫无隐私可言
  • 上古时期:使用对称加密的方式来保证传输的数据只有两个人知道
    • 此时有个问题:密钥不能通过网络传输(因为没有加密之前,都是不安全的),所以3y和女朋友先约见面一次,告诉对方密码是多少,再对话聊天。
  • 中古时期:3y不单单要跟女朋友聊天,还要跟爸妈聊天的哇(同样不想泄漏了自己的通讯信息)。那有那么多人,难道每一次都要约来见面一次吗?(说明维护多个对称密钥是麻烦的!)--->所以用到了非对称加密
    • 3y自己保留一份密码,独一无二的(私钥)。告诉3y女朋友,爸妈一份密码(这份密码是公开的,谁都可以拿--->公钥)。让他们给我发消息之前,先用那份我告诉他们的密码加密一下,再发送给我。我收到信息之后,用自己独一无二的私钥解密就可以了!
  • 近代:此时又出现一个问题:虽然别人不知道私钥是什么,拿不到你原始传输的数据,但是可以拿到加密后的数据,他们可以改掉某部分的数据再发送给服务器,这样服务器拿到的数据就不是完整的了。
    • 3y女朋友给3y发了一条信息”3y我喜欢你“,然后用3y给的公钥加密,发给3y了。此时不怀好意的人截取到这条加密的信息,他破解不了原信息。但是他可以修改加密后的数据再传给3y。可能3y拿到收到的数据就是”3y你今晚跪键盘吧“
  • 现代:拿到的数据可能被篡改了,我们可以使用数字签名来解决被篡改的问题。数字签名其实也可以看做是非对称加密的手段一种,具体是这样的:得到原信息hash值,用私钥对hash值加密,另一端公钥解密,最后比对hash值是否变了。如果变了就说明被篡改了。(一端用私钥加密,另一端用公钥解密,也确保了来源)
  • 目前现在:好像使用了数字签名就万无一失了,其实还有问题。我们使用非对称加密的时候,是使用公钥进行加密的。如果公钥被伪造了,后面的数字签名其实就毫无意义了。讲到底:还是可能会被中间人攻击~此时我们就有了CA认证机构来确认公钥的真实性

对于数字签名和CA认证还是不太了解参考一下

  • 阮一峰:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
  • 什么是数字签名和证书?https://www.jianshu.com/p/9db57e761255

回到我们的HTTPS,HTTPS其实就是在HTTP协议下多加了一层SSL协议(ps:现在都用TLS协议了)

L9JFpys.png

HTTPS采用的是混合方式加密

hVabvMS.png

过程是这样子的:

7rSoydd.png

260DP7n.png

  • 用户向web服务器发起一个安全连接的请求
  • 服务器返回经过CA认证的数字证书,证书里面包含了服务器的public key(公钥)
  • 用户拿到数字证书,用自己浏览器内置的CA证书解密得到服务器的public key
  • 用户用服务器的public key加密一个用于接下来的对称加密算法的密钥,传给web服务器
    • 因为只有服务器有private key可以解密,所以不用担心中间人拦截这个加密的密钥
  • 服务器拿到这个加密的密钥,解密获取密钥,再使用对称加密算法,和用户完成接下来的网络通信

LlRUZ79.png

所以相比HTTP,HTTPS 传输更加安全

  • (1) 所有信息都是加密传播,黑客无法窃听。
  • (2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
  • (3) 配备身份证书,防止身份被冒充。

参考资料:

  • 数字签名、数字证书、SSL、https是什么关系?https://www.zhihu.com/question/52493697/answer/131015846
  • 浅谈SSL/TLS工作原理:https://zhuanlan.zhihu.com/p/36981565
  • HTTPS系列:https://tech.upyun.com/article/192/HTTPS%E7%B3%BB%E5%88%97%E5%B9%B2%E8%B4%A7%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9AHTTPS%20%E5%8E%9F%E7%90%86%E8%AF%A6%E8%A7%A3.html
  • 网站HTTP升级HTTPS完全配置手册:https://www.cnblogs.com/powertoolsteam/p/http2https.html

三、总结

我只是在学习的过程中,把自己遇到的问题写出来,整理出来,希望可以对大家有帮助。如果文章有错的地方,希望大家可以在评论区指正,一起学习交流~

参考资料:

  • 《图解HTTP》

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y。为了大家方便,刚新建了一下qq群:742919422,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友

文章的目录导航

  • https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang

转载于:https://www.cnblogs.com/Java3y/p/9392349.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apple默认备份位置_如何将Apple Maps默认设置为步行路线

apple默认备份位置The default mode of transportation in Apple Maps is set to driving, but with a simple tweak, you can adjust your Apple Maps experience to default to the mode you use most. Apple Maps中的默认交通方式设置为行车,但是通过简单的调整&…

JS实现千分位

方法一:正则实现 function format (num) { var reg/\d{1,3}(?(\d{3})$)/g; return (num ).replace(reg, $&,); } 解释: 1、正则表达式 \d{1,3}(?(\d{3})$) 表示前面有1~3个数字,后面的至少由一组3个数字结尾 2、?表示正向引用&…

白色裤子为什么会沾上蓝色_什么是蓝色的,为什么它可以在Mac上运行?

白色裤子为什么会沾上蓝色You’re looking through Activity Monitor when you notice a process called blued. Should you be worried that this is running? No: it’s the process that powers Bluetooth on your Mac. 当您发现一个名为blued的进程时,您正在浏…

Linux移植之内核启动过程引导阶段分析

在Linux移植之make uImage编译过程分析中已经提到了uImage是一个压缩的包并且内含压缩程序,可以进行自解压。自解压完成之后内核代码从物理地址为0x30008000处开始运行。下面分析在进入C之前内核做的一些工作,以下是内核启动过程中打印出来的信息&#x…

outlook附件大小限制_如何在Outlook中调整大图片附件的大小

outlook附件大小限制When you have to send someone a large image file through email, it’s a good idea to resize the image file to make it smaller before sending it. Outlook makes this easy and allows you to resize the image file as it’s sent. 当您必须通过电…

西湖论剑WP

先水几句,这次的题确实难啊,动用洪荒之力了,第一名的神仙也没有全部做完。 官方说这次的题目有两道没被做出来,我猜应该是PWN和RE吧 本来我们是45名的,最后5分钟那帮人啊,硬生生给我们挤出前50,…

vm macos 启用3d_如何在macOS中启用夜班以减轻眼睛疲劳

vm macos 启用3dNight Shift is a new feature introduced in macOS Sierra 10.12.4, and you might already be familiar with it if you’re an iOS user. Here’s how to enable it and set it up on your Mac. Night Shift是macOS Sierra 10.12.4中引入的新功能&#xff0c…

如何在Windows 7、8、10,Vista或XP中删除Windows服务

If you are a fan of tweaking your system and disabling services, you might find that over time your Windows Services list becomes large and unwieldy. It’s easy enough to delete a Windows service using the Command Prompt. 如果您喜欢调整系统并禁用服务&#…

缩点(有向图的强连通分量)学习笔记

缩点(有向图的强连通分量)学习笔记 1.什么是强连通分量?: 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly conne…

mysql多表联合删除

文件一:01.txt文件二:02.txt登录mysql选择数据库表user结构表user_depart结构导入数据到表user导入数据到表user_depart联合删除查看删除后user表的数据查看删除后user_depart表的数据本文转自 Lee_吉 51CTO博客,原文链接:http://blog.51cto.…

centos 初学者_初学者:如何在Outlook 2013中创建和管理任务

centos 初学者If you’re one of those people who has a whiteboard or notepad with an ever-evolving to-do list, or your desk and monitors are adorned with Post-its reminding you of important events, then this the article for you. 如果您是拥有不断发展的待办事…

新服务器安装和配置zabbix的playbook

公司的金山区云服务器是由我负责的,每一次新购买了金山区的服务器都要把这些新服务器添加到zabbix监控里,于是我就编写了一个ansible的playbook,这样以后就可以在执行playbook的时候“带薪拉屎”了。 ansible主机准备: 1&#xff…

15个变态的Google面试题以及答案

在当前经济形势不景气的情况下,谷歌招聘新员工是一件令人振奋的事,特别是对那些在当前金融风暴中渴望找到安全港的年轻经理们和软件开发商们来说是个好消息。   不过,也不要高兴太早,谷歌在招聘新员工时,更加青睐名牌…

小程序禁用ios 左右滑动_如何在使用应用程序时禁用iOS控制中心

小程序禁用ios 左右滑动The Control Center has proven to be a thoughtful and welcome addition to iOS, but it can be annoying sometimes if you’re playing a game or using an app, and you accidentally open it. Here’s how you can disable it in such situations.…

repomd.xml错误14 not found

用Centos7最小化安装了系统,想练练手,可以到换了“搜狐”的YUM源,系统总报错更新错误说找不到repomd.xml。 然后就一直搜解决问题,能用到的都用到了,网上提到的都用到了。浪费了好几个小时没解决。正当无语的时候&…

超链接禁用_如何在Microsoft Word中禁用超链接

超链接禁用When you type a web or email address in Word, you may notice that the program automatically formats it as a live hyperlink. This is a setting in Word’s AutoFormat feature that is on by default but can be easily turned off. 当您在Word中键入网站或…

ssh面试题总结

题目1:Hibernate工作原理及为什么要用? 原理: hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc sql操作数据的方式…

xbox可以录视频声音吗_什么是Xbox Live Gold,它值得吗?

xbox可以录视频声音吗If you have an Xbox One or Xbox 360, Microsoft’s Xbox Live Gold service is required to play multiplayer games online. A subscription costs $10 per month or $60 per year. Xbox Live Gold also includes additional benefits, like free games…

显示器选三星还是飞利浦_如何为飞利浦色相灯设置计时器

显示器选三星还是飞利浦Maybe you want to turn off your Philips Hue lights after a certain amount of time has passed, or have them blink as a reminder. Whatever your needs, here’s how to set a timer for your Philips Hue lights to have them automatically tur…

PIE SDK与OpenCV结合说明文档

1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成,同时提供了Python、Ruby、MATLAB等语言的接口&…