计算机网络高频面试题
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等方式推送。