计算机网络面试题
什么是HTTP协议
- HTTP是基于TCP/IP协议的应用层协议。它不涉及数据包传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
http协议版本
- HTTP/0.9- 1991年发布,只有一个命令GET
- 服务器只能回应HTML格式的字符串,不能回应别的格式
 
- HTTP/1.0- 1996年5月发布,增加POST和HEAD命令
- 任何格式的内容都可以发送
- 每次通信都必须包括头信息,用来描述一些元数据
- 新增状态码、多字符集支持、多部分发送、权限、缓存、内容编码
- 主要缺点:每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其它资源,就必须再新建一个连接。
 
- HTTP/1.1- 1997年1月发布
- 持久连接:TCP连接默认不关闭,可以被多个请求复用
- 管道机制:允许浏览器同时发出A请求和B请求,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求
- 分块传输编码
- 新增PUT、PATCH、OPTIONS、DELETE
- 主要缺点:虽然允许复用TCP连接,但是在同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。
 
- HTTP/2- 2015年发布
- 二进制协议、多工、数据流、头信息压缩、服务器推送
 
http协议报文结构
- Http请求Request:请求行、请求头部、空行、请求数据(主体)
- Http响应Response:状态行、消息报头、空行、响应正文
常见code码的含义
- 200 OK:客户端请求成功
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:请求未经授权
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在,例如输入了错误的URL
- 500 Internal Server Error:服务器发生不可预期的错误
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
什么是HTTPS
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。
HTTPS主要作用是
- 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全。
- 对网站服务器进行真实身份认证。
HTTPS建立连接过程
- 客户端向服务端发起https请求。
- 服务端返回证书给客户端。
- 客户端验证证书真伪,通过CA机构公钥解密出服务端的公钥key1。
- 客户端生成密钥key2,并用服务端公钥key1加密Key2,发送给服务端。
- 服务端用私钥进行解密,得到密钥key2。
- 客户端和服务端用对称加密密钥Key2进行通信。
四次挥手最后等待为什么是2MSL
确保客户端发出的最后一次ack包可以到达服务端,如果等待2msl没有收到服务端的重发请求,就可以关闭,如果收到,就再次发送ack包,msl是报文最长存活时间,客户端发给服务端的报文,最长会经过msl个时间,如果超过这个时间,服务端没有收到,服务端就发报文要求客户端重传,这个报文最多msl个时间到达客户端,两个加起来就是2msl。
TCP为什么是四次挥手,而不是三次?
tcp是全双工通信,服务端和客户端都能发送和接收数据。tcp在断开连接时,需要服务端和客户端都确定对方将不再发送数据。
- 第1次挥手由客户端向服务端发起,服务端收到信息后就能确定客户端已经停止发送数据。
- 第2次挥手由服务端向客户端发起,客户端收到消息后就能确定服务端已经知道客户端不会再发送数据。
- 第3次挥手由服务端向客户端发起,客户端收到消息后就能确定服务端已经停止发送数据。
- 第4次挥手由客户端向服务端发起,服务端收到信息后就能确定客户端已经知道服务端不会再发送数据。
为什么不是3次挥手?在客户端第1次挥手时,服务端可能还在发送数据。所以第2次挥手和第3次挥手不能合并。
DNS解析
- 当用户在浏览器输入 www.baidu.com
- 浏览器向本地DNS发送查询请求
- 本地DNS向根服务器查询.com的地址
- 本地DNS向.com服务器查询baidu.com的地址
- 本地DNS向baidu.com服务器查询www.baidu.com 的地址
- 将 www.baidu.com 的地址发送给浏览器
http/2相比http/1.1有什么新特性?
- 多路复用: 即多个请求都通过一个TCP连接并发地完成。
- 服务端推送: 服务端能够主动把资源推送给客户端。
- 新的二进制格式: HTTP/2采用二进制格式传输数据,相比于HTTP/1.1的文本格式,二进制格式具有更好的解析性和拓展性。
- header压缩: HTTP/2压缩消息头,减少了传输数据的大小。
电脑上打开浏览器,输入 www.baidu.com ,回车,到百度页面出现。中间发生了什么?
- DNS 解析:将域名解析成 IP 地址
- TCP 连接:TCP 三次握手
- 发送 HTTP 请求
- 服务器处理请求并返回 HTTP 报文
- 浏览器解析渲染页面
- 断开连接:TCP 四次挥手
解决跨域的方案(知乎https://zhuanlan.zhihu.com/p/354666188)
- JSONP(JSON with padding)。优点:兼容性好;缺点:只支持GET请求。
- CORS(跨域资源共享)。在服务端设置Access-Control-Allow-Origin就可以开启CORS。