6.1 http1.0和http1.1有什么区别。
HTTP1.1相较于HTTP1.0增加了长连接、管道。
- 长连接:为解决HTTP/1.0发送一次请求,建立一次TCP,因此HTTP/1.1新增了长连接,减少连接重复创建和断开
- 管道:解决HTTP/1.0在一个TCP连接中每发送一个请求需等待一个响应的问题,HTTP/1.1新增管道,一个TCP中可发送多个请求,不必等其响应,减少整体响应时间。
6.2 TCP三次握手和四次挥手的流程,为什么断开连接要4次,如果握手只有两次,会出现什么。
TCP三次握手
客户端和服务端双方开始都是CLOSED状态,服务端首先监听某个端口进入LISTEN状态。
- 客户端随机初始化序号client_isn,然后将其存储在TCP的首部序号中,同时将SYN标记为1,表示SYN报文。接着客户端将SYN报文发送给服务端,表示向服务端发起连接,之后客户端进入SYN-SEND状态
- 服务端接收到客户端的SYN报文后,随机初始化序列号server_isn然后存储在其TCP的首部序号中,然后将client_isn+1添加到其确认应答号中,同时将SYN和ACK标记为1。接着将报文发送给客户端,进入SYN-RCVD状态。
- 客户端收到服务端的SYN-ACK报文后,返回一个确认应答号(server_isn+1)给服务端,然后将ACK标志为1。最后将ACK报文发送给服务端,这次连接客户端可携带数据,然后进入ESTABLISHED状态。
- 服务端收到客户端的应答报文后,也进入ESTABLISHD状态。
三次握手原因:无中间状态给客户端防止重复连接,造成重复连接导致的资源浪费。同步双方序列号
TCP四次挥手
- 客户端想断开连接,客户端会发送一个TCP头部的FIN控制位置为1的报文,即FIN报文,然后客户端进入FIN_WAIT1状态。
- 服务端收到客户端的报文后,发送一个ACK,然后进入CLOSE_WAIT状态。
- 客户端收到服务端的ACK报文后,进入FIN_WAIT2状态。
- 等待服务端处理完数据后,发送一个FIN报文,然后进入LAST+ACK状态。
- 客户端收到服务端的FIN报文后,回复一个ACK报文,然后进入TIME_WAIT状态。
- 服务端收到客户端的ACK报文后,进入CLOSE状态。服务端完成连接关闭
- 客户端经过2LSM后,自动进入CLOSE状态。客户端完成连接关闭。
四次挥手原因:服务端需要等待数据的处理和发送,且服务端的FIN报文和ACK报文是分开发送的。
6.3 TIME_WAIT和CLOSE_WAIT的区别。
TIME_WAIT和CLOSE_WAIT是TCP四次挥手中的不同状态。
- TIME_WAIT是主动关闭方发送完FIN报文并受到ACK确认后进入的状态,目的是等待足够时间确定连接完全关闭全且清理旧的状态信息。
- CLOSE_WAIT是被动关闭方接收到客户端FIN报文并回复ACK确认后进入的状态,被动关闭方指导连接将要关闭,但在等待应用层指示合适彻底关闭。
6.4 说说你知道的几种HTTP响应码,比如200, 302, 404。
- 2XX,表示响应数据成功,200表示服务端成功响应数据
- 3XX表示重定向,302表示临时重定向,303表示永久重定向,304表示协商缓存重定向
- 4XX表示客户端错误,404表示客户端请求路径错误
- 5XX表示服务端错误
6.5 当你用浏览器打开一个链接(如:https://docs.qq.com/doc/DWEZjdlBqU3ppZWhu)的时候,计算机做了哪些工作步骤。
- 首先我们会在浏览器输入访问的URL,浏览器会解析URL,识别协议(HTTP/HTTPS),域名(docs.qq.com),请求的Web服务器和文件名。DNS服务器先从本地缓存中查询服务器对应的IP地址,如果找不到就递归或迭代地从根服务器找到顶级服务器,再从顶级服务器找到权威服务器,直到找到对应的网址对应的IP地址,然后将网址解析为IP地址;
- TCP建立连接,TCP中的源端口和目标端口明确将数据传输到哪个应用,在传输消息之前需要建立三次握手保证发送方和接收方的可靠通信;
- 在网络接口层,需要源IP地址和目标IP地址才能进行数据传输;在第一步中解析出了目标IP,现在需要计算的源IP地址判断源IP地址由客户端哪一个网卡发出。IP层根据路由 规则将目标IP与每个网卡的子网掩码进行位于运算得到IP地址,与该网卡的Destination比较。如果相同,则将该网卡的IP地址作为IP包头的源地址。
- 在MAC层,需要发送方的MAC地址和目标MAC地址,MAC地址只需要读取网卡的ROM就可获得。在第三步中我们已确定源IP由哪一个网卡发出,因此可获取源MAC地址;想要获取目标MAC地址,首先根据路由表将发送的包通过网关发送给接收方的IP,然后通过ARP广播(先查ARP缓存,存在返回缓存中IP对应的MAC地址,反之广播)的形式找到接收方IP对应的网卡,再从该网卡中获取其MAC地址。
- 在网卡层,在准备传输的二进制数据后头部添加起始帧标记符标记包起始位置,在尾部添加FCS校验包是否损坏;然后将封装后的二进制数据由数字信号转换为电信号在网线中传输;
- 在交换机层,交换机将电信号转换为数字信号,然后校验包的FCS确认包是否损坏,如果数据没有损坏将数据存入其缓存区,根据MAC地址表查询目标MAC地址对应的IP地址,然后将报数据发送到相应端口。
- 在路由器中,路由器具有MAC地址和IP地址。首先会根据MAC地址将包数据传输到目标端口所在的以太网,再通过IP地址确定接收方的IP地址。
6.6 TCP/IP如何保证可靠性,说说TCP头的结构。
TCP/IP是依靠TCP协议来保证数据的可靠性的。
TCP头包括四元组(源端口、目标端口、序列号(解决网络包乱序)、确认应答号(解决丢包问题)、首部长度、控制位、窗口大小、校验和、选项)
6.7 如何避免浏览器缓存。
可以通过HTTP头部信息、添加版本号或时间戳、发起POST请求而非Get请求、禁用客户端缓存等方式来避免浏览器缓存。
- 使用HTTP头部信息:在HTTP头部的cache control字段中no-cache控制浏览器不缓存;通过Expires字段设置过期日期,缓存立即失效
- 添加版本号或时间戳:在静态资源URL后添加版本号或时间戳,下次请求URL不同,浏览器会认识是新数据重新加载
- 发起POST请求而不是Get请求:浏览器会缓存Get请求,一般不会缓存POST请求响应数据
- 禁用客户端缓存:在浏览器中设置禁用缓存
6.8 如何理解HTTP协议的无状态性。
HTTP的无状态性是指它不会保留关于之前请求或交互任何记录,每次客户端与服务端之间的通信都是独立的。
6.9 简述Http请求get和post的区别以及数据包格式。
区别:
- 概述:GET请求是从服务器获取资源是安全幂等的;POST请求是对服务器指定进行更改,是不安全幂等的;
- 参数:GET请求参数是拼接在URL后面的,POST是以请求载荷形式发起请求的;
- 数据长度限制:GET请求的URL是有长度限制的;POST请求的请求载荷是没有长度限制的
- 缓存:GET请求会被缓存并添加为标签;POST请求一般不会被缓存,也不会被添加为标签
数据包格式:
Get请求和POST请求的数据包区别于请求头和请求体,GET参数会被拼接在URL后,二POST请求是将数据存储在请求体重。
6.10 HTTP有哪些method
- GET:从服务器获取资源,请求参数拼接在URL后面,GET操作是安全幂等的
- POST:更新服务器资源,请求数据存储在请求体重,{POST操作不一定是安全的
- PUT:更新服务器资源,如果不存在,创建一个;请求体必须包含完整资源表示
- PATCH:对现有资源中的部分资源进行修改;请求体包含要更新的i资源和新值;
- DELETE:删除指定资源;
- OPTIONS:获取服务器支持的方法列表以及针对资源的通讯选项;
6.11 简述HTTP请求的报文格式。
HTTP请求报文是指客户端向服务端发起请求资源的数据包。它包括请求行、消息头、请求体
6.12 HTTP的长连接是什么意思。
6.13 HTTPS的加密方式是什么,讲讲整个加密解密流程。
6.14 Http和https的三次握手有什么区别。
6.15 什么是分块传送。
6.16 Session和cookie的区别。
参考链接: