5.HTTP和TCP
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的长连接是什么意思。
HTTP的长连接是指持久连接或Keep-alive连接,是指完成一次HTTP请求与响应之后,客户端与服务端之间保持TCP开放连接状态,而不是立即关闭这个连接。HTTP/1.0默认是关闭这个连接,在后续的HTTP/1.1及后面版本,默认是长连接。
长连接好处:
- 性能提升:避免重复创建和销毁TCP连接,减少网络延迟;
- 减少资源消耗:由于建立和销毁连接需要系统资源,因此减轻了服务器和网络设备压力
- 提高并发处理效率:同一个连接可以顺序发送多个请求和响应,当多个资源加载页面时,无需为每一个资源单独创建连接。
长连接缺点:
- 对头阻塞:在一个连接中,如果一个请求的响应白阻塞,该请求之后的所有请求必须等待,即使数据准备就绪也无法立即发送给客户端。
6.13 HTTPS的加密方式是什么,讲讲整个加密解密流程。
HTTPS是在HTTP基础上添加了SSL/TLS协议层实现安全传输,它通过对称加密和非对称加密保证数据的机密性和完整性,以及通过数字证书验证服务器身份缺不缺哦通信双方的身份认证。
加密解密流程:
- ClientHello:客户端向服务端发送加密通信请求,包含客户端支持的 TLS 协议版本、客户端生产的随机数、客户端支持的密码套件列表;
- ServerHello:服务端收到客户端的请求后,向客户端发出响应,包含确认 TLS 协议版本,如果浏览器不支持,则关闭加密通信、服务器生产的随机数、确认的密码套件列表、服务器的数字证书;
- 客户端回应:客户端收到服务端回应后,通过浏览器或操作系统中的CA公钥确认服务器数字证书的真实性。如果没问题,取出公钥加密报文,向服务器发送随机数,加密算法更改通知。握手结束后,并将之前所有通信数据做摘要,以供服务器校验。
- 服务端回应:服务器收到客户端的第三个随机数后,通过协商算法,计算出会话秘钥。再向客户端发送加密算法更改通知,握手结束后,将之前所有通信数据做摘要,以供客户端检查。
6.14 Http和https的三次握手有什么区别。
HTTP和HTTPS都是基于TCP协议建立三次连接的,它们之间的区别在于HTTPS在HTTP的基础上通过SSL/TLS协议来保证数据通信的安全性。
6.15 什么是分块传送。
分开传输时HTTP中的一种数据传输机制,允许HTTP响应体被分割成多个较小的数据块进行发送。分块传输编码时,服务器无需预先知道内容大小,而是边生成内容边发送给客户端。适用于动态生成内容或传输大文件,有效解决服务器无法提前确认内容总长度而导致的问题,尤其在长连接场景下适用。
6.16 Session和cookie的区别。
Session和cookie都是web开发应用中管理用户状态的两个不同机制,主要区别在于存储位置、安全性、大小限制和生命周期。
存储位置:cookie是由服务端生成发送给客户端的浏览器进行存储的,每次客户端发起HTTP请求时,浏览器会自动将该网站对应的Cookie一同发送到服务器。服务器为每个访客创建一个唯一的会话ID,并将其存储在服务器内存或数据库中。同时,服务器通过设置一个名为Session ID的Cookie(或者使用其他机制如URL重写)来跟踪用户的会话
安全性:cookie存储在客户端的浏览器中,无加密措施,易受到中间人攻击。session存储在服务器中,相对cookie安全,即使SessionID被盗,攻击者也需要在服务器中找到与之匹配的数据。
大小限制:大多数浏览器对单个cookie的大小至现在4KB左右;服务端对session没有严格大小限制
生命周期:cookie可设置超时时间,时间一到就删除;若未设置,浏览器关闭则会被清理。服务器也会设置session过期时间,用户一段时间未有活动或主动关闭浏览器服务端session也会被清理。
性能影响:每次HTTP都会携带cookie信息,当cookie过大时,会增加网络流量。服务器需要维护大量session数据。在高并发场景下,服务器压力剧增。
参考链接:
3.1 HTTP 常见面试题 | 小林coding (xiaolincoding.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)