计算机网络常见面试题

HTTP1与HTTP2的主要区别

HTTP1.0-HTTP2.0
Web 性能的终极目标是减少到用户端的延迟,让用户能够尽快的打开前端网页并进行相关交互。尽可能发送少的数据给服务器,从服务端下载尽可能少的数据,尽可能减少往返 (Round Trips) ,客户端与服务器无论是哪一边,额外的数据流都会带来额外的延迟开销,与此同时也更容易出现拥塞和丢包问题,这无疑严重影响了性能。 多余的 Round Trip 同样会增加延迟,尤其是在移动网络下(100ms 是让用户感觉到系统立即做出响应的时间上限)。
HTTP/2试图解决HTTP/1.1的许多缺点和不灵活之处

HTTP1.x

缺陷:

线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞。

HTTP1.0

缺陷:

浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接(TCP 连接的新建成本很高,因为需要客户端和服务器三次握手),服务器完成请求处理后立即断开 TCP 连接,服务器不跟踪每个客户也不记录过去的请求;

解决方案:

添加头信息——非标准的 Connection 字段 Connection: keep-alive

HTTP1.1

改进点:

1、持久连接

引入了持久连接,即 TCP 连接默认不关闭,可以被多个请求复用,不用声明 Connection: keep-alive(对于同一个域名,大多数浏览器允许同时建立 6 个持久连接)

2、管道机制

即在同一个 TCP 连接里面,客户端可以同时发送多个请求

3、分块传输编码

即服务端没产生一块数据,就发送一块,采用”流模式”而取代”缓存模式”

4、新增请求方式

PUT:请求服务器存储一个资源;
DELETE:请求服务器删除标识的资源;
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;
CONNECT:保留将来使用

缺点:

虽然允许复用 TCP 连接,但是同一个 TCP 连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“队头堵塞

避免方式:

一是减少请求数(代码合并、图片精灵),二是同时多开持久连接(静态资源分布到不同的域下)。

HTTP/2.0:

特点

采用二进制格式而非文本格式;完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行;使用报头压缩,降低开销服务器推送

1. 二进制协议

HTTP/1.1 版的头信息肯定是文本(ASCII 编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为”帧”:头信息帧和数据帧。二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。

2. 完全多路复用(多路复用的单一长连接)

a.单一长链接

在HTTP/2中,客户端向某个域名的服务器请求页面的过程中,只会创建一条TCP连接,即使这页面可能包含上百个资源。而之前的HTTP/1.x一般会创建6-8条TCP连接来请求这100多个资源。单一的连接应该是HTTP2的主要优势,单一的连接能减少TCP握手带来的时延(如果是建立在SSL/TLS上面,HTTP2能减少很多不必要的SSL握手,大家都知道SSL握手很慢吧)。

另外我们知道,TCP协议有个滑动窗口,有慢启动这回事,就是说每次建立新连接后,数据先是慢慢地传,然后滑动窗口慢慢变大,才能较高速度地传,这下倒好,这条连接的滑动窗口刚刚变大,http1.x就创个新连接传数据(这就好比人家HTTP2一直在高速上一直开着,你HTTP1.x是一辆公交车走走停停)。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。

所以咯,HTTP2中用一条单一的长连接,避免了创建多个TCP连接带来的网络开销,提高了吞吐量。

b.多路复用

HTTP2把要传输的信息分割成一个个二进制帧,首部信息会被封装到HEADER Frame,相应的request body就放到DATA Frame,一个帧你可以看成路上的一辆车,只要给这些车编号,让1号车都走1号门出,2号车都走2号门出,就把不同的http请求或者响应区分开来了。但是,这里要求同一个请求或者响应的帧必须是有有序的,要保证FIFO的,但是不同的请求或者响应帧可以互相穿插。这就是HTTP2的多路复用,是不是充分利用了网络带宽,是不是提高了并发度?

更进一步,http2还能对这些流(车道)指定优先级,优先级能动态的被改变,例如把CSS和JavaScript文件设置得比图片的优先级要高,这样代码文件能更快的下载下来并得到执行。

c.报头压缩

HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如 Cookie,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。对于相同的头部,不必再通过请求发送,只需发送一次;HTTP/2 对这一点做了优化,引入了头信息压缩机制;一方面,头信息使用 gzip 或 compress 压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表(分静态部分和动态部分),所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。

b.服务器推送

HTTP/2 允许服务器未经请求,主动向客户端发送资源;通过推送那些服务器任务客户端将会需要的内容到客户端的缓存中,避免往返的延迟

HTTP和HTTPS有什么不同

HTTP和HTTPS是什么?

我们使用浏览器访问一个网站页面,在浏览器的地址栏中我们会看到一串URL,如图

url
网站的URL会分为两部分:通信协议和域名地址。

域名地址都很好理解,不同的域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言。网站中的通信协议一般就是HTTP协
议和HTTPS协议。

HTTP(HyperText Transfer Protocol)超文本传输协议,HTTPS(Hypertext Transfer Protocol Secure)超文本传输安全协议,就是HTTP的安全版本。HTTP与HTTPS都属于应用层协议,下一层是TCP(传输层协议),HTTPS没有对HTTP作任何修改,HTTPS是由HTTP进行通信,但利用SSL/TLS来加密数据包,HTTPS是在HTTP与TCP之间加了一个SSLl/TLS协议。HTTP + 加密 + 认证 + 完整性保护 = HTTPS,可以说HTTPS是披着SSL/TLS外衣的HTTP。

SSL/TLS:SSL/TLS是HTTP和TCP之间的中转协议,也是一个应用层协议。我们可以把SSL/TLS理解为一个黑盒子,我们把数据丢给HTTP,HTTP把数据丢给SSL/TLS,SSL/TLS把数据加密后丢给TCP,这就是HTTPS。

HTTP协议

端口:80

HTTP协议是一种使用明文数据传输的网络协议。一直以来HTTP协议都是最主流的网页协议,但是互联网发展到今天,HTTP协议的明文传输会让用户存在一个非常大的安全隐患。假如你在一个HTTP协议的网站上面购物,你需要在页面上输入你的银行卡号和密码,然后你把数据提交到服务器实现购买。假如这个适合,你的传输数据被第三者给截获了,由于HTTP明文数据传输的原因,你的银行卡号和密码,将会被这个截获人所得到。

HTTPS协议

端口:443

HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。这样,就算数据被第三者所截获,但是由于数据是加密的,所以你的个人信息让然是安全的。这就是HTTP和HTTPS的最大区别。

HTTP和HTTPS的其他不同

数据加密传输,是HTTP和HTTPS之间的本质性区别。

当你使用Chrome浏览器访问一个HTTP网站的时候,你会发现浏览器会对该HTTP网站显示“不安全”的安全警告,提示用户当前所访问的网站可能会存在风险。

而假如你访问的是一个HTTPS网站时,情况却是完全不一样。你会发现浏览器的地址栏会变成绿色,企业名称会展示在地址栏中,地址栏上面还会出现一把“安全锁”的图标。这些都会给与用户很大的视觉上的安全体验。以下是EV证书在不同浏览器中的展现。

除了浏览器视觉上不同以外,HTTPS网站和HTTP网站还有一个很重要的区别,就是对搜索排名的提升,这也是很多站长所关注的地方。

百度和谷歌两大搜索引擎都已经明确表示,HTTPS网站将会作为搜索排名的一个重要权重指标。也就是说HTTPS网站比起HTTP网站在搜索排名中更有优势

HTTPS安全的局限性

HTTPS因为多了一层SSL/TLS加密,以及数字证书的握手,数据的加密/解密,以及密钥的交换与确认,消耗更多的CPU和内存资源,加密范围也比较有限,黑客攻击、拒绝服务攻击、服务器劫持方面几乎起不到什么作用。最关键的,SSL证书信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间攻击一样可行。
HTTP HTTPS

TCP的连接管理

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

连接三次握手

1.客户端请求建立连接:SYN=1,seq=x;
2.服务器对客户端的请求进行响应:SYN=1,ACK=1,seq=y,ack=x+1
3.客户端对服务器端的响应信息进行回应:ACK=1,seq=x+1,ack=y+1

注: SYN为同步信息,在建立连接过程中始终为1
tcp start

断开连接四次握手

1.客户端请求断开连接: FIN=1,seq = u;
2.服务端对客户端的请求应答:ACK=1,seq=v,ack=u+1;
3.服务端请求断开连接:FIN=1,ACK=1,seq=w,ack=u+1;
4.客户端对服务端的请求应答:ACK=1,seq=u+1,ack=w+1;
tcp stop

参考:https://www.jianshu.com/p/8666237e5ddd

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值