1.OSI与TCP/IP各层的结构与功能,都有哪些协议?
- OSI共有七层协议,分别是**物理层、数据链路层、网络层、运输层、会话层、表示层和应用层
追问1:HTTP属于哪一层?TCP/UDP属于哪一层?IP属于哪一层?
- IP:网络层;
- TCP/UDP:传输层;
- HTTP\RTSP\FTP: 应用层协议。
2:HTTP是什么?HTTP常见的状态码有哪些?GET和POST的区别?
- HTTP是超文本传输协议(HTTP是在计算机世界的协议。它使计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。)
- HTTP常见状态码:100 CONTINUE :继续。客户端应继续其请求。
GET和POST的区别?
- 1.get是获取数据的,而post是提交数据的;
- 2.GET用于获取信息,是无副作用的,是幂等的,且可以缓存;而POST用于修改服务器上的数据,有副作用,非幂等,不可缓存。
3.说一下HTTP的优缺点?
- 优点:简单、灵活和易于拓展、应用广泛和跨平台;
- 缺点:无状态、明文传输、不安全。
追问1:HTTP1.1 相对于 HTTP1.0的优化是什么?
- HTTP1.0最早在网页上使用是在1996年,那时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则是在1999年才开始广泛使用于现在各大浏览器的网页请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。主要区别体现在:
- 长连接:在HTTP/1.0中,默认的都是短连接,也就说每次请求都要重新建立一次连接。HTTP是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都这样的话,开销会比较大。因此最好能维持一个长连接,可以用多个长连接来发送请求。HTTP1.1起,默认使用长连接,默认开启Connection:keep-alive。HTTP/1.1的持续连接有非流水线型和流水线方式。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户端在收到前一个响应后才能发送下一个请求。
- 错我状态响应码:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- 缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag, If-Unmodified-Since,If-Match,If-None-Match等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
追问2:HTTP和HTTPS的区别?
- HTTP是超文本传输协议,信息是明文传输,存在安全风险问题。HTTPS则解决HTTP不安全的缺陷,在TCP和HTTP网络层之间加了SSL/TLS安全协议,使得报文能够加密传输。
- HTTP建立连接相对简单,TCP三次握手之后便可以进行HTTP的报文传输。HTTPS在TCP三次握手之后,还需SSL/TLS的握手过程,才可进行加密报文的传输。
- HTTP的端口号是80, HTTPS的端口号是443.
- HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
追问3:HTTPS解决了HTTP的哪些问题?
- HTTP由于是明文传输,所以安全上存在以下三个风险:
- 窃听风险,如通信链路上可以获取通信内容,号容易没;
- 篡改风险,如强制植入垃圾广告,视觉污染,用户眼容易瞎;
- 冒充风险,冒充淘宝网站,用户钱容易没。
- HTTPS在HTTP与TCP层之间加了SSL/TLS协议,可以很好的解决上述风险:
- 信息加密:交互信息无法被窃取,在HTTP的基础上给报文加了一层密码锁箱子,只有服务端和客户端可以打开;
- 校验机制:无法篡改通信内容,篡改了就不能正常显示;
- 身份证书:用向CA申请的数字证书,证明淘宝是真的淘宝网。
- SSL/TLS协议是能保证通信是安全的。
HTTPS是如何解决上面的三个风险的?
- 混合加密的方式实现信息的机密性,解决了窃听的风险;
- 摘要算法的方式来实现完整性,它能够为数据生成独一无二的‘指纹’,指纹用于校验数据的完整性,解决了篡改风险。
- 将服务器公钥放入到数字证书中,解决了冒充的风险。
4.讲一下HTTP1.1、HTTP2、HTTP3的演变?
HTTP1.1存在的性能瓶颈:
- 请求/响应头部未经压缩就发送,首部信息越多延迟越大,只能压缩Body部分;首部过长,发送时造成浪费。
- 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是对头阻塞;
- 没有请求优先级控制:
- 请求只能从客户端开始,服务器只能被动响应。
HTTP2改进了几个地方,分别是头部压缩、二进制格式、数据流、多路复用和服务器推送
- HTTP/2主要问题在于,多个HTTP请求在复用一个TCP连接,下层的TCP协议是不知道有多少个HTTP请求的。所以一旦发生了丢包现象,就会触发TCP的回传机制,这样在一个TCP连接下的所有HTTP请求都必须等待这个丢了的包被重新传回来。
- HTTP/1.1中的管道(pipeline)传输如果有某个请求阻塞了,那么队列后请求也统统被阻塞住了;
- HTTP/2多个请求复用一个TCP连接,一旦发生丢包,就会阻塞这一个TCP下的所有HTTP请求。这都是基于TCP传输层的问题,所以HTTP/3把HTTP下层的TCP协议改成了UDP。
- UDP发送是不管顺序,也不管丢包的,所以不会出现HTTP/1.1的队头阻塞和HTTP/2的丢包全部重传问题 。
- UDP是不可靠传输的,但是基于UDP的QUIC协议可以实现类似TCP的可靠性传输。
- QUIC有自己的一套机制可以保证传输的可靠性。当某个流丢包时,只会阻塞这个流,其他流不会受到影响。
- TLS3升级成了最新的1.3版本,头部压缩算法也升级成了QPack。
- HTTPS要建立一个连接,要花费6此交互,先是建立三次握手,然后是TLS/1.3的三次握手。QUIC直接把以往的TCP和TLS/1.3的6次交互合并成了3次,减少了交互次数。 (注意:QUIC协议实际上在UDP之上重新实现了大部分TCP的功能,但有一个关键区别:与TCP不同的是,它仍然可以不按顺序传输数据包)。