计算机网络高频面试题

HTTP协议

 

一、HTTP高频面试题(OSI与TCP/IP模型各层有那些协议)

1、应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

 

2、应用层、传输层、网际层、网络接口层

 

3、应用层、传输层、网络层、数据链路层、物理层

OSI7层,TCP4层,5层模型、

答案:

比如应用层协议:HTTP、FTP等

传输层:TCP、UDP协议

网络层:IP协议

 

二、HTTP是什么?HTTP常见状态码?GET和POST的区别

1、HTTP text transfer protocol 超文本传输协议。规定了计算机之间通信的规范。

HTTP常见状态码可以分为4类

1XX:正在处理 ,表示协议的中间状态,还需要后续操作

2XX:客户端,请求成功接收到服务器数据 200 OK成功,报文已经收到并正确处理

3XX:重定向,资源位置发生变动,需要客户端重新发送请求,301(临时重定向),302(永久重定向),304(不是重定向),302 表示资源被临时移动,304 Not Modifed 所请求的资源未做修改,不会返回任何资源,客户端通常会缓存访问过的资源,通过提供一个头信息,指出客户端希望只返回在指定日期之后修改的资源。许多人304解释为重定向,其实不准确的,重定向只涉及了301,302状态码。

(304的影响:1、百度蜘蛛抓取评率降低,关键词排名下降)

4XX:客户端出现了异常,请求报文有误,服务器无法 处理。 404 未请求到资源,400服务器不理解请求的语法,401请求需要登录(未授权),403服务器拒绝请求

5XX:服务器端出现了异常,处理请求时内部发生了错误 503 服务器资源unavailable service 500服务器内部错误,502 错误网关,504网关超时。

Get/Post区别:

1、在REST API风格的请求中,get是对于资源的查询,post是对资源的添加。一个是获取,一个是提交数据

2、get提交参数的值放在url中传输,post一般是放在http协议的请求体中 

3、get提交数据大小有限制,因为url的限制,post没有限制

4、get请求不是那么安全,而post更安全!

 

三、HTTP的优缺点

答:

优点:简单、灵活和易于扩展、应用广泛

缺点:非安全的协议,明文传输、无状态

追问:HTTP1.1比HTTP1.0优化了哪些部分?

1、长连接:在HTTP1.0协议中,默认使用是短连接,也就是每次请求都要重新建立一次连接。HTTP是基于TCP/IP协议的,每次建立或断开连接都要握手三次、四次挥手,开销较大。

HTTP1.1 默认使用了长连接,开启了CONNECTION:keep-alive。HTTP1.1的持续连接有非流水线和流水线的方式。流水线的方式是在收到HTTP响应报文之前就能接着发送新的报文

非流水线就是在接受后才能发下一个请求。

2、错误状态码:在HTTP1.1中增加了24个错误状态码,比如409表示请求资源与当前状态发生了冲突。

3、缓存处理:在HTTP1.0中主要使用的是if-modified-sice,expires来作为缓存判断依据。HTTP1.1使用了更多缓存判断策略如Entity tag,if-unmodified-tag,ifmatch-if-none-match

4、带宽的优化及网络连接的使用:HTTP1.0中存在带宽浪费问题,例如客户端只是需要对象一部分,而服务器回传了整个对象,并不支持断点续传。HTTP1.1则在请求头中使用了range来获取资源的某个部分,状态码是206.

追问

HTTP和HTTPS的区别

1、HTTP 是超文本传输协议,信息是明文的、安全存在很大的挑战,存在很大的安全风险。HTTPS则解决了HTTP的安全风险,通过在传输层和网络层之间使用TLS/SSL协议,使得报文是加密传输。

2、HTTP连接相对简单,TCP三次握手后,便可以开始HTTP的报文传输,而HTTPS还需要SSL/TLS握手,才能加密传输

3、HTTP端口号80,HTTPS端口号是443

4、HTTPS协议需要向CA机构申请认证证书,保证服务器可信。

5、HTTP是明文传输,没有采用任何加密

追问HTTPS解决了哪些安全问题:

1、窃听风险,明文传输,通过wireshark可以抓包,获取明文内容

2、篡改风险,强制植入广告等

3、冒充电商支付等服务器,骗钱。

通过:

1、信息加密:交互信息无法窃取。

2、校验机制:无法篡改通信内容,篡改后就不能正常显示了。

3、身份证书:证明淘宝是真的淘宝。

 

 

四、HTTP1.1 HTTP 2 HTTP3 演变

HTTP1.1存在性能瓶颈

请求/响应头未经过压缩就发送,头部越大,只能压缩body

HTTP2改进了:头压缩、二进制格式、数据流、多路复用和服务器主动推送

HTTP2存在的问题:多个HTTP请求在复用一个TCP连接,下层TCP协议是不知道有多少个HTTP请求。所以一旦发生了丢包,就会TCP重传机制,这样一个TCP连接中所有HTTP请求都必须等待这个包重传。

HTTP3改进:将下层的TCP协议改为了UDP协议,UDP发生三不管顺序的,也不管丢包的。(UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。)

 

 

通过CA数字证书,进行验证,数字证书包含了有(证书持有者的身份,公钥信息(因为https要解决是否有中间人攻击,掉包了公钥,狸猫换太子!))。

数字证书

 

如果证书中的信息被篡改,因为中间人是没有私钥,不能进行签名,在验证的时候用证书中的hash算法出来的值,与公钥进行解密验证存储的散列值会不一样,因为原文内容以及改变,而私钥签名已经定了散列值。

 

HTTPS需要在TCP三次握手后,才会进行四次握手,延迟会很慢。

HTTPS 验证过程 引用大佬的https://zhuanlan.zhihu.com/p/43789231  一定讲清楚!

 

加密过程说明

1、【浏览器】向服务器发送 https 请求 产生并发送一个随机数Rand1(包含:需要的协议以及加密方式)
2、【服务器】向 CA 机构获取证书 。
3、【服务器】向浏览器发送数字证书(包含 public key) ,产生一个随机数Rand2
4、【浏览器】用预置的 CA 列表验证证书,如有问题会提示风险。生成随机数Rand3,并使用服务端的公钥加密,将Rand3发送给服务器。

5、【服务器】用自己的 private key 解密得到第三个随机值。(使用rand1+rand2+rand3这三个随机数加密生成秘钥,两边都有这个对称加密的会话秘钥了)。
6、接下来就可以根据之前的约定加密方式生成对称加密的会话秘钥。
 

 

Cookie有那些参数?

setcookie(name,value,expire,path,domain,secure)

name:必须,规定cookie的名称

value:必须,规定cooke的值

expire:可选规定cookie的有效期

path:可选,规定cookie的服务器路径。

secure:可选,规定是否经过安全的HTTPS了解传输cookie。

 

 

 

HTTP1.0和HTTP1.1区别:

1、连接方面:http1.0默认使用非持久连接,而http1.1默认使用持久连接。http1.1通过使用持久连接来使多个htto请求复用同一个TCP连接,以此来避免使用费持久连接时需要建立连接的时延。

2、资源请求方面:http1.0中,存在一些浪费宽带的现象,例如客户端只是需要某个对象的一部分,而服务器却传了整个对象过来,并且不支持断点续传,http1.1 则在请求头引入range头域,它允许

之请求资源的某个部分,返回状态码206

3、缓存方面在http1.0中使用的是if-modified-since、Expires来作为缓存判断的标准,http1.1则引入更多的缓存控制策略。Etag、If-Unmodified-since、If-Match-If-None-match等。

4、增加了字段:htttp1.1增加了host字段,用来指定服务器域名。http1.0认为每台服务器都绑定一个唯一的IP地址,因此请求信息中URL并没有传递主机名(hostname)。但随着虚拟技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且共享一个ip地址。因此host字段可以指定发往同一台服务器的那个后台应用。

5、http1.1相对于http1.0新增了很多请求方法,如PUT、HEAD、OPTIONS等

 

HTTP1.1 和 HTTP2.0区别:

二进制协议:HTTP2是一个二进制协议。在http1.1中报文头信息必须是文本,数据体可以是文本,也可以是二进制。HTTP/2则是彻底的二进制协议,头信息和数据体都是二进制,并且统称为“帧”,可以分为头信息帧和数据帧。帧的概念就是为了实现多路复用的基础。

多路复用:HTTP实现了多路复用,HTTP2仍然使用了TCP连接的多路复用,但是在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,可以避免“队头堵塞”的问题

数据流:HTTP/2使用了数据流的感念,因为HTTP2的数据包不是按照顺序发送的,同一个连接里的连续的数据包,可能属于不同的请求,因此要对数据包做标记,指出它属于哪个请求。HTTP2将每个请求或回应所有数据包,称为一个数据流。每个数据流都有一个独一无二的编号。数据包发送时,都必须标记数据流ID,用来区分它属于哪个数据流。

头信息压缩:HTTP2实现了头信息压缩,由于HTTP1.1不带状态,每次请求都必须附带所有信息。所以很多字段是重复的,比如cookie和useragent,一模一样的内容,每次请求都必须附带有点影响带宽。因此HTTP2引入了头信息压缩机制。头信息使用gzip或者compress压缩后再发送;另一放慢,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,提高速度

服务端推送:HTTP2允许服务器未经请求,主动向客户端发送资源,就叫服务器推送,使用websocket以及SSE等方式推送。

 

posted @ 2022-04-13 12:41  雷雷提  阅读(130)  评论(0编辑  收藏  举报