题目 11 - 题目 15
11.304 状态码表示什么?在什么场景下使用?
304 状态码表示“未修改”(Not Modified),用于缓存机制中。它告知客户端缓存的资源仍然有效,无需重新下载。
场景:
- 缓存优化:当客户端请求一个资源时,服务器可以通过 If-Modified-Since 或 If-None-Match 头部判断该资源是否被修改。如果资源未修改,服务器返回 304 状态码,客户端继续使用缓存中的资源。
好处:
- 减少带宽消耗:避免重复传输未改变的资源,节省了网络带宽。
- 提高加载速度:客户端可以使用缓存资源,减少了服务器的响应时间。
- 降低服务器负载:减少了对服务器的请求处理,降低了负载。
坏处:
- 缓存问题:如果缓存策略设置不当,可能会导致客户端获取到过时的资源。
- 复杂性:需要正确配置缓存头部和验证机制,增加了开发和维护的复杂性。
- 可能的延迟:在一些网络环境中,验证资源是否修改的请求和响应可能导致额外的延迟,尽管这个延迟通常较小。
12.TCP 粘包(TCP packet sticking)是什么?
TCP 粘包(TCP packet sticking)是一种在 TCP 协议中常见的现象,指的是接收方在读取数据时,可能会将来自多个发送包的数据合并在一起,或者将一个发送包的数据拆分成多个接收包进行读取。这种现象与 TCP 的数据传输机制有关,而 TCP 协议本身并不保留消息边界,只关心字节流的可靠传输。
粘包和拆包的原因
- 流式协议:
TCP 是一个流式协议,数据在网络上传输时被看作一个连续的字节流,没有明确的消息边界。这意味着发送的数据包在接收端可能会被合并,也可能被拆 分。
- 网络延迟和缓冲:
TCP 可能会将多个小的数据包合并成一个较大的数据包发送,或者将一个较大的数据包拆分成多个小的包进行发送。这取决于网络状况和 TCP 实现的缓冲策略。
- 发送和接收缓冲区:
发送方的缓冲区可能会在发送数据时合并多个数据块,而接收方的缓冲区可能会将这些数据块合并成一个完整的消息进行读取。
解决方案
- 协议设计:
在应用层设计协议时,通常会在数据流中添加分隔符或消息长度字段,以明确消息的边界。例如,可以在每个消息前面加上固定长度的消息头,表示消息的长度。
- 数据标识:
在数据传输过程中使用特定的标识符或分隔符来区分不同的消息。这种方法可以帮助接收方识别和处理不同的数据包。
- 分段和重组:
在应用层进行分段和重组操作,确保从 TCP 流中提取出完整的消息。例如,可以使用协议来处理粘包和拆包问题,确保接收到的数据能够被正确解析。
13.请求 Header 中的 Content-Type ,有哪些常见的值?
-
application/json
- 用途:传输 JSON 格式的数据,是前后端交互的常见选择。
- 示例:
{ "key": "value" }
-
application/x-www-form-urlencoded
- 用途:表单数据的默认格式,将数据以键值对的形式传递,通常在简单表单提交中使用。
- 格式:key1=value1&key2=value2
-
multipart/form-data
- 用途:上传文件时常用的格式,允许在一个请求中包含文本字段和文件字段。
- 格式:数据被分段发送,每段包含字段信息,适合文件和表单混合数据的提交。
-
text/plain
- 用途:发送未经编码的纯文本内容,适用于简单的文本数据传输。
- 示例:plain text
-
application/xml
- 用途:用于传输 XML 格式的数据,通常用于某些旧系统或特定接口。
- 示例:
<note><to>User</to></note>
-
application/octet-stream
- 用途:用于传输任意的二进制数据,常用于文件下载或上传,表示未知的文件类型。
- 特点:数据以字节流的形式传递,适合音视频、图片等多媒体数据。
-
application/javascript
- 用途:用于传输 JavaScript 代码或脚本内容。
- 场景:在接口返回的响应头中更常见,适合动态生成和执行的脚本数据。
-
text/html
- 用途:传输 HTML 文档,适合网页内容的传输。
- 特点:常用于返回页面内容,浏览器会将其识别为 HTML 并渲染。
-
image/png、image/jpeg、image/gif
- 用途:传输图像文件,Content-Type 中会包含图像的具体格式。
- 场景:用于直接访问图片 URL 或上传图像。
14. 你知 道哪些常见的网络协议?
1. 应用层协议
应用层协议负责处理特定的网络应用程序,如邮件传输、网页浏览等。
-
1.1. HTTP/HTTPS
-
HTTP(Hypertext Transfer Protocol)
- 用于传输网页数据的协议,是万维网的基础协议。
- 特点:无状态、基于请求-响应。
-
HTTPS
- 在 HTTP 的基础上加入了 SSL/TLS 加密,确保数据传输的安全性。
-
-
1.2. FTP
-
FTP(File Transfer Protocol)
- 用于文件上传和下载的协议。支持传输大文件,但安全性较低。
-
-
1.3. SMTP/POP3/IMAP
-
SMTP(Simple Mail Transfer Protocol)
-
用于发送电子邮件。
-
POP3(Post Office Protocol 3)
-
下载邮件到本地并删除服务器上的邮件。
-
IMAP(Internet Message Access Protocol)
-
支持邮件的同步,保留服务器上的邮件副本。
-
-
1.4. WebSocket
- 用于建立全双工的通信连接,适合实时应用场景,如在线聊天、实时通知等。
- 传输层协议
传输层协议负责为应用层提供端到端的通信服务。
-
2.1. TCP
TCP(Transmission Control Protocol)
- 面向连接的可靠传输协议,保证数据的完整性和顺序。
- 应用场景:文件传输、网页浏览。
-
2.2. UDP
UDP(User Datagram Protocol)
- 面向无连接的协议,不保证数据可靠性,适合对时延敏感的应用。
- 应用场景:视频流、在线游戏、语音通话。
- 网络层协议
网络层协议负责数据在不同网络间的路由和转发。
-
3.1. IP
IP(Internet Protocol)
提供设备之间的唯一标识,并实现数据包的路由和传递。
常见版本:
- IPv4:使用 32 位地址(如 192.168.1.1)。
- IPv6:使用 128 位地址(如 2001:0db8::1),解决 IPv4 地址耗尽问题。
-
3.2. ICMP
- ICMP(Internet Control Message Protocol)
- 用于发送网络诊断信息,如 Ping 和 Traceroute。
-
3.3. ARP/RARP
-
ARP(Address Resolution Protocol)
- 通过 IP 地址获取设备的 MAC 地址。
-
RARP(Reverse ARP)
- 通过 MAC 地址获取设备的 IP 地址。
-
-
- 数据链路层协议
数据链路层协议负责在同一网络中传输数据帧
-
4.1. Ethernet
- 定义了局域网的物理连接方式和数据帧结构。
-
4.2. PPP
- PPP(Point-to-Point Protocol)
- 用于点对点链路的通信。
-
- 安全协议
安全协议负责确保数据传输的保密性、完整性和真实性。
-
5.1. SSL/TLS
- SSL(Secure Sockets Layer)/TLS(Transport Layer Security)
- 提供安全的加密通信,广泛用于 HTTPS。
-
5.2. IPSec
- IPSec(Internet Protocol Security)
- 提供网络层的数据加密和认证,用于 VPN 等场景 。
-
5.3. Kerberos
- 网络身份验证协议,基于对称密钥加密。
-
-
网络管理协议
-
网络管理协议用于监控和管理网络设备。
- 6.1. SNMP
SNMP(Simple Network Management Protocol) 用于监控网络设备的状态,如路由器和交换机。
- 6.2. Telnet/SSH
Telnet:不加密的远程登录协议,安全性低。 SSH(Secure Shell):提供加密的远程登录服务。
-
-
-
文件传输与资源共享协议
-
这些协议用于文件共享和网络设备间的资源访问。
-
7.1. SMB
- SMB(Server Message Block)
- 用于 Windows 系统中的文件共享。
-
7.2. NFS
- NFS(Network File System)
- 提供分布式文件系统访问。
-
15,http 协议中的 CSP 是什么?
什么是 CSP?
- CSP (Content Security Policy) 是 HTTP 协议中的一种安全功能,全称为 内容安全策略。它用于帮助浏览器检测和阻止某些类型的安全威胁,例如 跨站脚本攻击(XSS) 和 数据注入攻击。通过限制页面加载的内容来源,CSP 能够有效减少攻击面,提高 Web 应用的安全性。
工作原理
- 定义策 略:服务器通过 HTTP 响应头 Content-Security-Policy,或
<meta>标签来定义 CSP 策略。 - 策略作用:浏览器根据定义的策略控制页面中可加载的资源(如脚本、样式、图片等)的来源。
- 检测与阻止:
- 如果资源或行为不符合策略,浏览器会阻止加载。
- 可通过策略开启“报告模式”,将违反策略的行为报告到指定的 URL。
CSP 策略示例
- 防止加载外部脚本
仅允许从当前域名加载脚本资源:
Content-Security-Policy: script-src 'self';
- 允许可信的第三方资源
允许加载 Google Analytics 脚本,但阻止其他外部脚本:
Content-Security-Policy: script-src 'self' https://www.google-analytics.com;
- 开启报告模式
仅报告违反 CSP 的行为,而不阻止加载:
Content-Security-Policy: default-src 'self'; report-uri /csp-report;