计算机网络¶
cookie、session 和 token 的区别¶
Cookie 是存储在客户端的小型文本文件,用于跟踪和识别用户。 Session 是服务器端用来存储用户信息的机制。服务器能够通过 SessionID 来识别用户。 Token,也称作令牌,是一种服务端无状态的认证方式,适合于 REST API 的场景。Token 由用户唯一标识、时间戳和签名组成。
死锁是什么?如何避免死锁?¶
概念:死锁是指在一组进程中,每个进程都在等待其他进程释放资源,而这些资源又被这组进程中的其他进程占有,导致所有进程都无法向前推进的状态。 避免:产生死锁的四个必要条件是:互斥条件、持有并等待条件、不可剥夺条件、环路等待条件。破环其中一个条件就可以。
TCP 拥塞控制流量控制¶
- 流量控制(Flow Control)
目的:解决发送方与接收方速率不匹配的问题,防止接收方缓冲区溢出。 核心机制:
- 滑动窗口协议:接收方通过TCP头部的
Window Size字段告知发送方当前可接收的数据量(即接收窗口rwnd)。 -
动态调整:发送方根据
rwnd实时调整发送速率,确保发送数据不超过接收方的处理能力。 关键场景:例如视频播放器缓冲不足时,会通过缩小窗口通知服务器降低发送速率,避免卡顿。 -
拥塞控制(Congestion Control)
在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变化,这种就叫拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至于过载,前提是网络能够承受现有的网络负荷。
但流量控制往往是指点对点通信量的控制,是一个端到端的问题,流量控制所要做的就是抑制发送端发送数据的速率(通过调整接收窗口的大小,以便接收端来得及接收)
目的:解决网络拥堵问题,防止过多数据涌入导致路由器丢包或网络瘫痪。 核心机制(经典四阶段):
- 慢启动(Slow Start):初始窗口指数增长(1→2→4→8...),直到达到阈值(
ssthresh)或出现丢包。 - 拥塞避免(Congestion Avoidance):窗口线性增长(每RTT增加1),逐步逼近网络容量上限。
- 规定:
- 为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量
- 拥塞窗口指数级上升的时候,执行的是慢开始算法
- 拥塞窗口增加按线性规律增长的时候,执行拥塞避免算法
- cwnd < ssthresh ,使用慢开始
- cwnd > ssthresh , 使用拥塞避免
- cwnd = ssthresh, 都可以
- 快重传(Fast Retransmit):收到3个重复ACK时立即重传丢失报文,无需等待超时。采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失
- 快恢复(Fast Recovery):重传后窗口减半,直接进入拥塞避免阶段(而非重启慢启动)。
- 拥塞避免阶段,拥塞窗口是按照线性规律增大,这就是加法增大AI,而一旦出现超时或3个重复确认,就要把ssthresh设定为当前拥塞窗口的一半,并大大减少拥塞窗口的数值(拥塞窗口也减小一半)。这叫乘法减小MD,合在一起就是所谓的AIMD算法
- 当cwnd = 1的时候,是超时检测丢失报文段;当cwnd = ssthresh 的时候,是3个重复确认
http断点重传是什么?¶
HTTP 断点续传(断点重传)是指在下载大文件时,如果网络中断或暂停下载,下次可以从已经下载的位置继续下载,而不需要从头开始重新下载。
核心原理:
- 通过 Range 请求头指定从哪个字节开始下载
- 服务器通过 Content-Range 响应头告知返回的是部分内容
- 状态码为 206 Partial Content 表示部分内容成功返回
优势:节省带宽、减少下载时间、支持断点续传,特别适合大文件下载。
http和https的区别¶
| 对比维度 | HTTP | HTTPS |
|---|---|---|
| 端口 | 默认 80 | 默认 443 |
| 安全性 | 明文传输,容易被窃听和篡改 | 基于 SSL/TLS 加密传输,更加安全 |
| 证书 | 需要不证书,或可以免费申请 | 需要申请 CA 证书,有免费也有收费 |
| 速度 | 更快,无需加密解密 | 较慢,增加了 TLS 握手过程 |
| SEO | 不友好 | 搜索引擎更偏好 |
总结:HTTPS = HTTP + SSL/TLS,是加密的 HTTP。
介绍一下http头部字段和http2¶
常见 HTTP 头部字段:
通用头:
- Cache-Control:控制缓存行为,如 no-cache、max-age
- Connection:连接管理,keep-alive 保持连接
- Date:发送消息的日期时间
请求头:
- Host:指定服务器域名和端口
- User-Agent:客户端浏览器信息
- Accept:客户端能接受哪些 MIME 类型
- Authorization:认证信息,如 Bearer token
- Cookie:发送 cookie 到服务器
- Range:断点续传,指定请求范围
响应头:
- Server:服务器软件信息
- Set-Cookie:设置 cookie 到客户端
- Content-Type:响应体的媒体类型
- Content-Length:响应体长度
- Location:重定向地址
- ETag:资源标识,用于缓存验证
HTTP/2 新特性: 1. 二进制分帧:将数据分割为更小的帧,采用二进制编码,相比 HTTP/1.x 的文本解析更高效 2. 多路复用:同一个 TCP 连接上可以同时发送多个请求和响应,对头阻塞问题 3. 头部压缩:使用 HPACK 算法压缩头部,减少冗余头部的大小 4. 服务器推送:服务器可以主动向客户端推送资源,无需客户端请求 5. HTTPS 强制:HTTP/2 通常要求基于 TLS 部署,安全性更高
对比 HTTP/1.1:性能提升明显,特别是在多请求场景下。
http请求格式大致是哪些¶
HTTP 请求由四个部分组成:
1. 请求行(Request Line)
<方法> <URL> <HTTP版本>
GET /index.html HTTP/1.1
2. 请求头部(Request Headers) 每行一个键值对,用冒号分隔:
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/json
Content-Type: application/json
Content-Length: 123
3. 空行 必须有一个空行分隔头部和请求体
4. 请求体(Request Body) - GET 方法通常没有请求体 - POST 方法会把数据放在请求体中发送给服务器
完整示例:
POST /api/login HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 48
{"username":"admin","password":"123456"}
HTTPS的过程¶
HTTPS 通信过程分为 TCP 三次握手 → TLS 握手 → 应用数据传输。
TLS 握手过程(简化版):
- Client Hello:客户端发送支持的 TLS 版本、加密套件、随机数
Client Random给服务器 - Server Hello:服务器选择双方都支持的 TLS 版本和加密套件,返回自己的证书、随机数
Server Random - 密钥交换:
- 客户端验证服务器证书合法性
- 客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后发送
- 双方根据三个随机数(Client Random + Server Random + Pre-Master Secret)生成会话密钥
- Finished:双方发送加密后的握手结束消息,验证握手成功
- 开始加密通信:之后所有应用数据都使用会话密钥加密传输
核心:非对称加密用来交换会话密钥,对称加密用来加密实际传输的数据,兼顾安全性和性能。
多路复用解释一下¶
多路复用是指在同一个 TCP 连接中,同时传输多个 HTTP 请求和响应,而不需要建立多个 TCP 连接。
HTTP/1.1 的问题:
- 虽然有 Connection: keep-alive 复用 TCP 连接,但同一连接同一时间只能处理一个请求
- 必须等一个请求响应完成才能发下一个请求,这就是队头阻塞问题
- 浏览器为了并发只能建立多个 TCP 连接(通常 6-8 个),但会增加 TCP 握手开销
HTTP/2 的多路复用如何工作: - 将每个请求/响应分割成多个独立的二进制帧 - 不同请求的帧可以交错发送在同一个 TCP 连接上 - 接收端根据帧头部的流标识符重新组装成完整的请求/响应 - 真正实现了一个 TCP 连接上并行处理多个请求,消除了队头阻塞
优势: - 减少 TCP 连接数量,降低握手开销和服务器负载 - 减少 TCP 慢启动对性能的影响 - 并发请求更快,页面加载性能提升
※※※OSI七层、TCP/IP五层模型¶
如果问TCP/IP模型,这里就不说表示层和会话层,数据链路层和物理层一起称为网络 接口层 • 自上而下分别是应用层,表示层,会话层,传输层,网络层,数据链路层,物理层; ○ 应用层为各种各样的应用提供网络服务,因为网络应用非常的多,所以就要求 应用层采用不同的应用协议来解决不同的应用请求,因此应用层是最复杂的一层。 典型的协议有http 80,ftp 21,SMTP 25等; ○ 表示层主要处理在两个进程之间交换信息的方式;(一个系统的信息另一个系 统看得懂) ○ 会话层主要负责两个进程之间的会话管理,包括建立,管理及终止进程间的会 话; ○ 传输层主要负责两个进程之间数据的传输服务; ○ 网络层主要负责将传输层产生的TCP报文段或者UDP数据报封装成IP数据报; (选择合适的网间路由分发数据) ○ 数据链路层主要负责将网络层产生的IP数据报封装成帧; ○ 物理层主要就是实现比特流的透明传输;
ip,tcp,icmp分别在哪一层¶
在 TCP/IP 五层模型中:
- IP:网络层
- TCP(传输控制协议):传输层
- ICMP(Internet 控制报文协议):网络层
说明:ICMP 虽然是网络层协议,但其报文封装在 IP 数据报中传输,用于传递控制消息(如 ping、路径发现、错误报告等)。
网络层和传输层负责的内容有什么区别¶
| 对比维度 | 网络层 | 传输层 |
|---|---|---|
| 寻址对象 | IP 地址(主机间) | 端口号(进程间) |
| 负责范围 | 主机到主机(host-to-host) | 进程到进程(process-to-process) |
| 主要功能 | 路由选择、分组转发、异构网络互联 | 为应用进程提供端到端的通信服务 |
| 数据单元 | IP 数据报 | TCP 报文段 / UDP 用户数据报 |
| 服务类型 | 无连接、不可靠服务 | 面向连接可靠(TCP)/ 无连接不可靠(UDP) |
| 路径选择 | 会根据路由表选择不同路径转发 | 不关心路径,只负责端到端传输 |
一句话总结:网络层负责把数据从一个主机送到另一个主机,传输层负责把数据送到主机上的具体进程。
网络层了解有什么协议?¶
核心协议: - IP(Internet Protocol):网际协议,核心协议,负责寻址和路由 - ICMP(Internet Control Message Protocol):Internet 控制报文协议,用于网络错误探测和报告(ping、traceroute) - ARP(Address Resolution Protocol):地址解析协议,根据 IP 地址获取 MAC 地址 - RARP(Reverse ARP):反向地址解析协议,根据 MAC 地址获取 IP 地址(现在较少使用) - DHCP(Dynamic Host Configuration Protocol):动态主机配置协议,动态分配 IP 地址 - IGMP(Internet Group Management Protocol):Internet 组管理协议,用于多播管理 - OSPF(Open Shortest Path First):开放最短路径优先,内部网关路由协议 - BGP(Border Gateway Protocol):边界网关协议,外部网关路由协议
ARP协议的原理?¶
ARP(地址解析协议)的作用是:根据目标 IP 地址,获取对应的 MAC 地址。
工作原理:
- 发送 ARP 请求:当主机需要发送数据给同一局域网内的另一台主机,知道对方 IP 但不知道 MAC 地址时,会广播发送一个 ARP 请求报文:
-
"我的 IP 是 A,MAC 是 X,我想知道 IP 为 B 的主机的 MAC 地址是什么?"
-
所有主机接收:局域网内所有主机都收到这个 ARP 请求
-
目标主机回复:只有 IP 地址匹配的主机会回复一个 ARP 响应报文:
-
"IP 为 B 的 MAC 地址是 Y"
-
缓存更新:发送方收到响应后,会将 IP-MAC 映射关系存入本地 ARP 缓存,后续直接使用
特点: - ARP 是广播请求,单播响应 - 本地有 ARP 缓存,避免频繁发送 ARP 请求 - ARP 工作在网络层和数据链路层之间,解决同一网段内 IP 转 MAC 的问题
TCP和UDP的区别¶
| 对比维度 | TCP | UDP |
|---|---|---|
| 连接性 | 面向连接,需要三次握手建立连接 | 无连接,不需要建立连接 |
| 可靠性 | 可靠传输,保证数据不丢失不重复 | 不保证可靠,尽力而为 |
| 有序性 | 保证数据按序到达 | 不保证顺序 |
| 流量控制 | 有滑动窗口流量控制 | 没有 |
| 拥塞控制 | 有拥塞控制机制 | 没有 |
| 服务类型 | 面向字节流 | 面向报文 |
| 首部开销 | 20 字节(固定) | 8 字节 |
| 连接数量 | 一对一 | 支持一对一、一对多、多对多 |
| 速度 | 较慢,因为连接、确认、重传开销 | 较快,开销小 |
TCP和UDP的适用场景¶
TCP 适用场景: - 文件传输(FTP):需要完整可靠 - 网页浏览(HTTP/HTTPS):内容不能出错 - 邮件传输(SMTP/POP3):邮件不能丢 - 远程登录(SSH/Telnet):交互需要可靠
UDP 适用场景: - 实时音视频通话:对延迟敏感,允许少量丢包 - 在线视频直播:追求低延迟,偶尔卡顿可以接受 - DNS 查询:查询简单快速,一次请求一次响应 - 物联网传感器数据上报:定期上报,丢一两次不影响 - 游戏:即时交互,低延迟优先
总结:对可靠性要求高选 TCP,对低延迟要求高选 UDP。
TCP的拥塞控制机制?¶
TCP 拥塞控制主要有四个阶段:慢启动、拥塞避免、快重传、快恢复。
核心变量:
- cwnd(拥塞窗口):发送方根据网络拥堵情况动态调整的窗口
- rwnd(接收窗口):接收方告知的可用缓冲区大小
- ssthresh(慢启动阈值):慢启动和拥塞避免的分界点
四个阶段:
- 慢启动(Slow Start):
- 初始
cwnd = 1(或更小),每收到一个 ACK,cwnd++ - 拥塞窗口指数增长(1 → 2 → 4 → 8...)
-
当
cwnd >= ssthresh时,退出慢启动,进入拥塞避免 -
拥塞避免(Congestion Avoidance):
- 每经过一个 RTT,
cwnd只增加 1 - 拥塞窗口线性增长,缓慢探测网络容量
-
直到发生丢包
-
丢包处理:
- 超时重传:
ssthresh = cwnd / 2,cwnd = 1,重新进入慢启动 -
快重传:收到 3 个重复 ACK,判断不是拥塞而是随机丢包,立即进入快恢复
-
快恢复(Fast Recovery):
ssthresh = cwnd / 2,cwnd = ssthresh- 直接进入拥塞避免,不重新慢启动
核心思想:AIMD(加法增大,乘法减小),不丢包就慢慢增大窗口,出现丢包就迅速减半阈值。
TCP流量控制窗口和拥塞控制窗口有什么不同¶
| 对比 | 流量控制窗口(rwnd) | 拥塞控制窗口(cwnd) |
|---|---|---|
| 解决问题 | 发送方和接收方速率不匹配 | 网络本身拥塞 |
| 谁维护 | 接收方维护,通过 TCP 头部告知发送方 | 发送方自己维护 |
| 控制对象 | 限制发送方发送速率不超过接收方处理能力 | 限制发送方发送速率不超过网络承载能力 |
| 触发原因 | 接收方缓冲区满了 | 网络中路由器丢包了 |
| 调整方式 | 接收方每次回复 ACK 时动态更新 | 发送方根据丢包情况按拥塞控制算法调整 |
| 作用层面 | 端到端的流量控制 | 整个网络的拥塞控制 |
发送方实际窗口:实际发送窗口 = min(cwnd, rwnd),同时受两个窗口限制。
说说io多路复用?¶
I/O 多路复用是一种 I/O 模型,允许单个线程同时监听多个文件描述符(socket),当某个描述符就绪(可读/可写)时,通知用户进程进行处理。
核心思想:用一个线程(或少量线程)管理多个 socket,避免为每个连接创建一个线程,节省资源。
常见实现:
| 实现 | 平台 | 时间复杂度 | 特点 |
|---|---|---|---|
| select | POSIX | O(n) | 支持多平台,文件描述符数量有限(默认 1024),每次都要遍历全部 |
| poll | POSIX | O(n) | 突破数量限制,原理同 select,还是需要遍历 |
| epoll | Linux | O(1) 就绪 | 事件驱动,只返回就绪的描述符,性能最好,支持水平触发和边缘触发 |
| kqueue | macOS/BSD | O(1) 就绪 | 类似 epoll,性能好 |
| IOCP | Windows | - | 完成端口,Windows 下异步 I/O |
适用场景: - 网络服务器需要处理大量并发连接(如 Redis、Nginx、Tomcat) - 同时处理多个 socket 读写事件
优点: - 相比多线程/多进程,节省线程资源,减少上下文切换开销 - 单线程就能处理大量并发连接
计算机网络的IP结构¶
IPv4 地址长度为 32 位,通常采用点分十进制表示,结构分为两部分:
两级结构(分类地址):
<网络号> + <主机号>
按网络号长度分类:
| 类别 | 首字节范围 | 网络号长度 | 主机号长度 | 用途 |
|---|---|---|---|---|
| A 类 | 1-126 | 8 位 | 24 位 | 大型网络 |
| B 类 | 128-191 | 16 位 | 16 位 | 中型网络 |
| C 类 | 192-223 | 24 位 | 8 位 | 小型网络 |
| D 类 | 224-239 | - | - | 多播 |
| E 类 | 240-255 | - | - | 保留研究 |
CIDR(无分类编址):
- 现在互联网普遍使用 CIDR,不再按 A/B/C 分类
- 格式:IP地址/前缀长度,例如 192.168.1.0/24
- 前缀长度就是网络号位数,剩余位数是主机号位数
特殊地址:
- 127.0.0.1:回环地址,指向本机
- 0.0.0.0:表示本机所有 IP 地址
- 网络号全 0:表示本网络
- 主机号全 1:广播地址
- 私有地址:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16,用于内网
IPv6:128 位地址,用冒分十六进制表示,解决 IPv4 地址耗尽问题。
※TCP连接管理¶
• TCP是面向连接的协议,因此每个TCP连接都有三个阶段:连接建立,数据传送 和连接释放 ○ TCP连接的建立——三次握手 ▪ 第一次握手,就是客户端向服务端发送一个连接请求报文,在报文段中将 SYN置为1;第二次握手,就是服务端向客户端发送一个确认连接报文,在报 文段中将SYN和ACK都置为1;第三次握手,就是客户端向服务端发送一个 确认的报文,表明自己收到了服务端的确认信息,在报文段中将ACK置为1; 这样经过三次握手,TCP连接就建立了。 ○ TCP连接的释放——四次挥手 ▪ 第一次挥手,就是客户端向服务端发送一个连接释放请求的FIN包;第二 次挥手,就是服务端向客户端发送一个确认的ACK包,表示我接收到了断开 连接的请求,不过服务端可能还有一些数据正在处理;第三次挥手,就是服务 端处理完了所有的数据,向客户端发送FIN包,表示服务端现在可以断开连接 了;第四次挥手,就是客户端向服务端发送一个确认的ACK包,此时TCP连 接还未释放,必须经过计时器设置的时间2MSL(MSL:TCP报文在Internet 上最长生存时间)后,客户端才断开连接了;这样经过四次挥手,TCP连接就 断开了。
※TCP 是如何做到可靠传输的¶
TCP协议主要通过校验和,序号,确认号,超时重传,流量控制等机制来保证数据 的可靠传输 ○ 校验和 就是说 如果接收方计算出来的校验和与发送方的不一致,那么数据就 会被丢弃;(在计算校验和时,需要在TCP报文段的前面加上12字节的伪首部) ○ 序号 就是本报文段发送的数据的第一个字节的序号,用来保证数据能有序的 提交给应用层。 ○ 确认号 就是期望收到对方的下一个报文段的数据的第一个字节的序号。 ○ 超时重传 就是TCP每发送一个报文段,就对这个报文段设置一次计时器,如 果设置的重传时间到了但没有收到确认,就要重传这一报文段。
○流量控制 就是 基于滑动窗口实现的,主要就是接收方在向发送方发送确认报 83. TCP 和 UDP的区别 文的时候,通过设置窗口字段来将接收窗口的大小通知给发送方,这样就可以控制 发送方的发送速率,以免发送方发送速度过快,导致数据丢失。
TCP 和 UDP的区别¶
TCP 准确性相对高,适合文件传输,远程登录 UDP效率要求相对高,适合QQ聊天,在线视频 第一,TCP面向连接,而UDP面向无连接 第二,TCP可靠,而UDP不可靠 第三,TCP面向字节流,而UDP面向报文 第四,TCP首部是20B,而UDP首部是8B 第五,TCP只支持一对一通信,而UDP支持广播通信 第六,UDP传输比TCP更快,所以更适合即时通信
TCP的四次挥手¶
TCP 连接释放需要四次挥手:
- 第一次挥手:客户端发送
FIN=1,请求断开连接,进入FIN-WAIT-1状态 - 第二次挥手:服务器收到 FIN 后回复
ACK=1,确认客户端断开请求,进入CLOSE-WAIT状态,客户端收到 ACK 后进入FIN-WAIT-2状态 - 第三次挥手:服务器处理完剩余数据后,发送
FIN=1请求断开连接,进入LAST-ACK状态 - 第四次挥手:客户端收到 FIN 后回复
ACK=1,进入TIME-WAIT状态,服务器收到 ACK 后进入CLOSED状态 - 客户端:等待 2MSL 时间后进入
CLOSED状态,真正释放连接
TIME-WAIT 状态的意义¶
TIME-WAIT 状态需要等待 2MSL(最长报文寿命,RFC 推荐 2 分钟),主要有两个核心原因:
1. 保证 TCP 连接可靠关闭 - 确保最后一个 ACK 报文能够到达服务器 - 如果客户端发出的最后一个 ACK 丢失,服务器会重发 FIN,客户端在 TIME-WAIT 状态能够重新发送 ACK - 如果客户端直接进入 CLOSED,就无法处理服务器重发的 FIN,可能导致服务器无法正常关闭
2. 防止"延迟重复的连接报文"干扰新连接 - 网络中可能存在一些属于本次连接的延迟报文,在连接关闭后才到达目的地 - 如果没有 2MSL 等待,关闭连接后马上建立一个相同四元组(源IP、源端口、目的IP、目的端口)的新连接 - 这些延迟的旧报文可能会被误送到新连接中,导致数据混乱 - 等待 2MSL 可以让网络中这些残留的报文自然消失,保证下一个新连接不受干扰
总结:TIME-WAIT 是主动关闭连接的一方(通常是客户端)需要经历的状态,等待 2MSL 是为了保证连接可靠关闭和避免旧连接残留报文干扰新连接。
浏览器输入URL到显示页面的过程¶
- 首先浏览器会向DNS请求解析域名的ip地址
- 然后和该服务器建立TCP连接,浏览器会向服务器发出HTTP请求
- 服务器处理完请求后就会将HTTP响应结果发送给浏览器
- 然后关闭TCP连接,浏览器对响应结果进行解析并且渲染页面
常见状态码及其所代表的含义¶
HTTP 状态码由三位数字组成,第一位表示类别:
1xx:信息性状态码 - 请求已接收,需要继续处理¶
| 状态码 | 含义 |
|---|---|
| 100 Continue | 客户端应继续发送请求。服务器收到请求头,告知客户端继续发送请求体 |
2xx:成功状态码 - 请求成功被处理¶
| 状态码 | 含义 |
|---|---|
| 200 OK | 请求成功,正常返回响应数据 |
| 201 Created | 请求成功,并且服务器创建了新资源(常用于 POST/PUT) |
| 204 No Content | 请求成功,但响应没有内容(常用于 DELETE 后) |
| 206 Partial Content | 部分内容,断点续传或范围请求成功 |
3xx:重定向状态码 - 需要客户端进一步操作¶
| 状态码 | 含义 | 区别 |
|---|---|---|
| 301 Moved Permanently | 永久重定向 | 资源永久移动到新位置,搜索引擎会更新地址 |
| 302 Found | 临时重定向 | 资源临时移动到新位置,搜索引擎保留原地址 |
| 304 Not Modified | 未修改 | 资源未修改,客户端使用本地缓存即可,不返回内容 |
| 307 Temporary Redirect | 临时重定向 | 与 302 类似,但要求重定向后保持请求方法不变 |
301 vs 302 总结: - 301:永久跳转,浏览器会缓存重定向结果 - 302:临时跳转,每次都请求原服务器
4xx:客户端错误状态码 - 请求有错误,服务器无法处理¶
| 状态码 | 含义 |
|---|---|
| 400 Bad Request | 请求参数错误,语法错误,服务器无法理解 |
| 401 Unauthorized | 未授权,需要身份认证(登录) |
| 403 Forbidden | 禁止访问,服务器拒绝请求,权限不足 |
| 404 Not Found | 资源不存在,服务器找不到请求的资源 |
| 405 Method Not Allowed | 请求方法不被允许(比如用 POST 访问了只支持 GET 的接口) |
| 408 Request Timeout | 请求超时 |
| 409 Conflict | 请求冲突,比如多个用户同时修改同一个资源 |
| 413 Payload Too Large | 请求体太大,服务器拒绝处理 |
| 429 Too Many Requests | 请求频率太高,被限流了 |
5xx:服务器错误状态码 - 服务器处理请求出错¶
| 状态码 | 含义 |
|---|---|
| 500 Internal Server Error | 服务器内部错误(通常是程序异常) |
| 501 Not Implemented | 服务器不支持该请求方法,无法完成处理 |
| 502 Bad Gateway | 网关/代理错误,从上游服务器收到了无效响应 |
| 503 Service Unavailable | 服务不可用,服务器暂时无法处理请求(通常是过载、维护) |
| 504 Gateway Timeout | 网关超时,上游服务器超时没有响应 |
| 505 HTTP Version Not Supported | 服务器不支持请求中使用的 HTTP 版本 |
面试常考¶
- 304:协商缓存命中,资源未修改,使用本地缓存
- 401 vs 403:401 是没登录,403 是登录了但没权限
- 502 vs 504:502 是网关收到错误响应,504 是网关超时
- 301 vs 302:一个永久一个临时,对 SEO 影响不同
页面置换算法 • 缺页中断:在作业运行的过程中,如果发现要访问的页面不在内存中,就发生了缺 页中断,此时操作系统就会将对应的页面调入到内存中。 • 页面置换算法就是 当发生缺页中断的时候,如果当前内存中没有空闲的空间,那 么操作系统就必须在内存中选择一个页面将其移出内存,用来选择淘汰哪一个页面的规 则就叫做页面置换算法 • 主要有四种算法:先进先出,最少使用,最近最少使用,最佳页面置换算法; ○ 先进先出就是 淘汰最先进入内存的页面;最少使用就是 淘汰最少使用过的页 面;最近最少使用就是 淘汰最近的一段时间内未被使用的页面;最佳页面置换就 是 淘汰以后永不使用或者很长时间内不会被访问的页面,这怎么可以知道撒,所 以是一种无法实现的算法;