前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >http、https、http2一些概念

http、https、http2一些概念

作者头像
wade
发布2020-04-24 10:11:04
5370
发布2020-04-24 10:11:04
举报
文章被收录于专栏:coding个人笔记coding个人笔记

非对称加密,现在用的几乎都是非对称加密,自己有一个密钥对公钥和私钥,公钥可以给任何人知道,别人通过公钥加密发数据给自己,自己通过密钥解密。

数字签名,当别人知道你的公钥,虽然不能解密传输的数据,但是可以劫持之后通过公钥加密伪造数据发送给你,这时候就需要数字签名了。将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名验证传输的内容是否是对方发送的数据,发送的数据没有被篡改过。

数字证书,比如有一个中间人通过一系列方法把你的电脑某个人的公钥给伪造了,然后你一直以为这是那个人的公钥,这时候就算被攻击了。这时候需要CA认证机构,也是通过公钥密钥加数字签名的方式,来验证我们公钥的真实性。(个人理解成CA机构永远不会被伪造攻击,所以能安全)

当我们浏览器输入一个域名地址之后,会先去浏览器本地缓存查找有没有域名对应的IP地址,如果没有会去本机的host文件去查询有没有域名和ip的指向,所以我们经常会在host文件去配置指向。再没有就会进行DNS解析,解析出域名对应的IP地址。一般来说DNS已经够了,但是DNS是没有全世界所有的网址的,所以还有一个更权威的机构,gTLD Server,,每一个顶级域名对应的IP都有记录。简单说第一步就是要把域名解析出IP地址。

http是无状态的,客户端和服务端不会知道之前通信的是谁。http1.0之后新增了持久连接,也就是说一次TCP连接可以发送多个请求,在浏览器的network里面可以看见response headers的Connection: keep-alive就是持久连接的标志,然后看connection id,相同就是用的同一个TCP连接。

http实体主体其实就是作为数据在http中传输的数据,可以等价为报文主体,报文主体是http的一部分。可以采用压缩把实体主体压小,在客户端解析数据,也可以分块传输实体主体的方法提升传输效率。我们如果在下载东西的过程中断了,按照以前我们是需要重新下载的,但是现在可以在中断中继续下载。我们可以使用到获取范围数据,这种叫做范围请求。

http有请求报文和响应报文,都是分为首部和报文主体组成。其中首部字段有很多内容,这边列举几个:

Accept-Encoding: gzip,compress:浏览器告诉服务器,它支持的压缩格式 User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0):浏览器告诉服务器,浏览器的内核是什么 Connection: close/Keep-Alive: 浏览器告诉服务器,请求完后是断开链接还是保持链接 Server:apache tomcat:服务器告诉浏览器,服务器的型号是什么 Transfer-Encoding: chunked: 服务器告诉浏览器数据以分块方式回送

https安全就是因为使用SSL建立安全的通信线路,其实HTTPS就是披着SSL的HTTP,采用数字签名和第三方CA的数字证书保证的安全。SSL加密还有加速的作用。

http使用端口是80,https使用端口是443,http在应用层工作,https的安全传输机制是在传输层工作。https信息都是加密的,抓包工具获取的也是加密的,具有校验机制,被篡改了就会立刻发现,有身份证书,防止被冒充。

一次http请求的几个步骤:

建立TCP连接

向浏览器发送请求行,也就是发送请求命令:GET /sample/hello.jsp HTTP/1.1

向浏览器发送请求头,然后用一个空白行结束头信息的发送,也就是报文首部和报文主体之间的空行。

服务器应答,也就是 HTTP/1.1 200 OK 这些。

服务器发送应答头,跟请求头一样。

服务器发送数据以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

关闭TCP连接。

http1.1版本默认持久连接,也就是TCP连接不断开,新增了管线化,客户端同时发出的多个http请求,不用一个一个等待响应,但是这个功能默认是关闭的,只限于理论阶段,因为可以同时发送,但是响应数据还是要按照顺序来一一接收。还新增了断点续传。利用HTTP消息头使用分块传输编码,将实体主体分块传输。

TCP连接限制:

对于同一个域名,浏览器最多只能同时创建 6~8 个 TCP 连接 (不同浏览器不一样)。为了解决数量限制,出现了域名分片技术,其实就是资源分域,将资源放在不同域名下(比如二级子域名下)。以一种变通的方式突破限制,但是会造成很多问题,因为过多连接对于服务器来说容易造成网络拥挤、交通阻塞等。

线头阻塞:

每个 TCP 连接同时只能处理一个请求响应,如果上一个响应没返回,后续请求响应都会受阻。所以管线化pipelining 技术出现了,但是管线化也有问题,比如第一个响应慢还是会阻塞后续响应、服务器为了按序返回响应需要缓存多个响应占用更多资源、浏览器中途断连重试可能得重新处理多个请求等等。

http2采用了二进制分帧层,帧是数据传输的最小单位,以二进制传输代替原本的明文传输,原本的报文消息被划分为更小的数据帧。而且会改变一些头字段。

http2的多路复用:

在一个 TCP 连接上,可以不断发送帧,每帧的 stream identifier标识这一帧属于哪个流,然后在对方接收时,根据 stream identifier 拼接每个流的所有帧组成数据。把 HTTP/1.1 每个请求都当作一个流,那么多个请求变成多个流,请求响应数据分成多个帧,不同流中的帧交错地发送,这就是 HTTP/2 中的多路复用。 http2 对于同一域名只需要创建一个连接,而不是像 http/1.1 那样创建 6~8 个连接。

http2服务推送:

浏览器发送一个请求,服务器主动向浏览器推送与这个请求相关的资源,这样浏览器就不用发起后续请求。

http2采用HPACK算法压缩头部。http1端对端关闭就直接断开连接,http2引入RST_STREAM类型的frame,可以在不断开连接的前提下取消某个请求的流。还可以设置请求的优先级。

(完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档