其他计算机网络面试题总结:
【计算机网络重要知识点总结一】
【计算机网络重要知识点总结二】
【计算机网络重要知识点总结四】
一、POST和GET有哪些区别?
使用场景
- GET 的语义是从服务器获取指定的资源,请求的参数位置一般是写在 URL 中(URL 只支持 ASCII,而且浏览器会对 URL 的长度有限制)。
- POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,请求携带数据的位置一般是写在报文 body 中。
安全性和幂等性
- 安全性:指请求方法不会「破坏」服务器上的资源。
- 幂等性:多次执行相同的操作,结果都是「相同」的。
- GET 方法就是安全且幂等的,因为它是「只读」操作。
- POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全和非幂等的。
是否可缓存
- GET可以缓存到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx)
- POST不可缓存
二、GET请求中URL编码的意义?
在GET请求中会对URL中非西文字符进行编码,这样做的目的就是为了 避免歧义
假设有“name1=value1&name2=value2”的字符串,该字符串在计算机中用ASCII码表示为:
6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532
6E616D6531:name1
3D:=
76616C756531:value1
26:&
6E616D6532:name2
3D:=
76616C756532:value2
服务端在接收到该数据后就可以遍历该字节流,一个字节一个字节的吃,当吃到3D这字节后,服务端就知道前面吃得字节表示一个key。
但是参数值中就包含 = 或 & 这种特殊字符的时候该怎么办?例如“va&lu=e1”
为了避免服务器解析产生歧义,解决的办法就是对参数进行URL编码。
三、HTTP中常用的状态码?
状态码分类
1xx:表示目前是协议的中间状态,还需要后续操作;
2xx:表示请求成功
3xx:表示重定向,需要重新请求
4xx:表示请求报文错误,客户端出错
5xx:表示服务器端错误
常用状态码
「200 OK」:如果是非 HEAD
请求,服务器返回的响应头都会有 body 数据。
「204 No Content」:响应头没有 body 数据。
「206 Partial Content」:表示响应返回的 body 数据并不是资源的全部,而是其中的一部分。
「301 Moved Permanently」:表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
「302 Found」:表示临时重定向。
「304 Not Modified」:表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源。
「400 Bad Request」:请求错误。
「403 Forbidden」:表示服务器禁止访问。
「404 Not Found」:表示请求的资源未找到。
「500 Internal Server Error」:服务器错误。
「502 Bad Gateway」:服务器作为网关或代理时返回的错误码。
「503 Service Unavailable」服务器繁忙。
四、HTTP长连接和短链接,流水线是什么?
长连接和短链接
- 短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
- 长连接:指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,节省了TCP连接建立和断开的消耗。
流水线
默认情况下,HTTP 请求是按顺序发的,下一个请求只有在当前请求收到响应之后才会被发出。而收到下一个请求可能需要很长时间。流水线就是在一个 HTTP 长连接下连续发出请求,不用等待响应返回,减少延迟。
五、HTTP1.0,1.1,2.0 ,3.0的版本区别?
HTTP/1.0
-
仅支持短连接,每次发送数据都会经过TCP三次握手和四次挥手,效率低。
-
不支持端点续传,每次发送数据都会发送全部数据
-
不支持虚拟网络
HTTP/1.1
-
默认使用长连接:只需要建立一次连接,可以传输多次数据,传输完成之后,只需要一次切断即可。通过请求头的
Connection: keep-alive
设置。 -
引入了管道机制:即在同一个TCP连接里面,客户端可以同时发送多个请求。
-
支持断点续传:也就是允许请求资源的一部分,返回206状态码,请求头中设置range字段,来规定分割的byte数范围
-
Host头处理:
http1.0中默认每台服务器都绑定唯一的一个IP地址,所以请求消息中url并没有传递主机名,也就是hostname。http1.1中请求消息和响应消息都支持Host头域,而且,如果我们不传这个字段还会报一个400(bad request)的状态码(虚拟主机共享ip地址)
-
增加了缓存策略:
http1.0的缓存策略主要是依赖header中的If-Modiified-Since,Expire(到期)http1.1的缓存策略要比http1.0略多,例如 Entity tag(实体标签), If-Unmodified-Since, If-Match, If-None-Match等
有了持久连接和管道,大大的提升了HTTP的效率。但是服务端还是顺序执行的,效率还有提升的空间。
HTTP/2.0
- 基于 HTTPS 。安全性有保障。
- 利用HPACK算法进行头部压缩。由于HTTP1.1头部经常出现Cookie、Accept、Sever、Range等字段可能会占用几百到几千字节,而body有时只有几十字节(“头重身轻”)。
- 报文采用二进制格式。头信息帧和数据帧统称为帧。
- 数据流。每个请求的所有数据包,称为一个数据流。每个数据流都标记着一个独一无二的编号(Stream ID),因此不同 Stream 的帧是可以乱序发送的。
- 多路复用。在一个连接中,客户端和浏览器都可以同时发送多个请求或回应,而不用按照顺序一一对应。
HTTP/1.1 中的管道虽然解决了请求的队头阻塞,但是没有解决响应的队头阻塞;
HTTP/2.0通过多路复用解决了响应的队头阻塞,但是在一个TCP连接中,一旦发生丢包,就会阻塞住所有的 HTTP 请求,这属于 TCP 层队头阻塞。
HTTP/3.0
HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP。UDP 发生是不管顺序,也不管丢包的,所以不会出现像 HTTP/2 队头阻塞的问题,基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。
-
无队头阻塞
-
更快的连接建立
六、HTTP和HTTPS的区别?
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
- http 协议是免费使用的, https 协议需要到CA机构购买证书;
- http明文传输,https报文加密;
- http端口80,https端口443;
- https会消耗更多cpu和内存资源;
七、HTTP中的请求方法有哪些?
- GET:获取资源。
- HEAD:获取报文首部。
- POST:对指定资源进行处理。
- PUT:上传文件。由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题
- Delete:删除文件,与 PUT 功能相反,并且同样不带验证机制。
八、对称加密和非对称加密的区别?
对称加密
指双方对信息的加密和解密使用的是同一个密钥的方式。
非对称加密
非对称加密的密钥分为公钥和私钥,任何人都可以获得公钥,但是只有自己拥有私钥。使用公钥加密的数据,只有对应的私钥能进行解密;使用私钥加密的数据,只有对应的公钥能进行解密。加密和解密使用的是两个不同的密钥,故称非对称加密。
九、请求转发和重定向的区别?
请求转发
- 浏览器只发出一次请求,收到一次响应。
- 浏览器地址显示的是用户提交的请求路径,不会改变。
- 只能跳转道当前应用的资源中。
重定向
- 浏览器发出两次请求,接收两次响应。
- 浏览器地址显示为重定向的请求路径,而非提交的请求路径。可以防止表单的 重复提交。
- 不仅可以跳转到当前应用的其他资源,也可以跳转到其他应用的资源。
十、谈谈你对停止等待协议的理解?
停止等待协议
位于数据链路层,为了实现可靠传输,原理是每发送完一个帧就停止发送,等待对方的确认,在收到确认后再发送下一个帧。
超时重传
在停止等待协议中会设置超时计时器,如果超过时间没有收到接收方的ACK,则会对数据进行重传。