1. HTTP 常见状态码及使用场景
问题:请列举至少5个HTTP状态码及其适用场景。
答案:
200 OK:请求成功,常见于GET/POST请求。304 Not Modified:资源未修改,浏览器可直接使用本地缓存(协商缓存生效)。404 Not Found:请求的资源未找到。500 Internal Server Error:服务器内部错误。403 Forbidden:服务器拒绝请求(无权限)。301 Moved Permanently:永久重定向(SEO权重转移)。302 Found:临时重定向。
2. HTTPS 加密过程
问题:HTTPS 如何实现加密通信?简述SSL/TLS握手过程。
答案:
- 客户端发送支持的加密算法列表和随机数(Client Hello)。
- 服务器返回选择的加密算法、随机数、数字证书(Server Hello)。
- 客户端验证证书有效性(CA机构验证),生成预主密钥并用证书公钥加密发送。
- 服务器用私钥解密预主密钥,双方通过随机数和预主密钥生成会话密钥。
- 后续通信使用对称加密(如AES)加密数据。
3. 跨域问题与解决方案
问题:什么是跨域?如何解决跨域问题?
答案:
-
跨域:因浏览器的同源策略(协议/域名/端口任一不同),限制跨域请求。
-
解决方案:
- CORS:服务器设置响应头
Access-Control-Allow-Origin。 - JSONP:通过
<script>标签跨域加载数据(仅支持GET)。 - 代理服务器:前端开发服务器或Nginx代理转发请求。
- WebSocket:协议本身支持跨域。
- CORS:服务器设置响应头
4. TCP 三次握手与四次挥手
问题:为什么TCP连接需要三次握手,断开需要四次挥手?
答案:
-
三次握手(建立连接):
- 客户端发送
SYN(同步序列号)。 - 服务器返回
SYN-ACK(确认+同步)。 - 客户端发送
ACK(确认)。
确保双方都能确认收发能力。
- 客户端发送
-
四次挥手(断开连接):
- 客户端发送
FIN。 - 服务器返回
ACK。 - 服务器处理完数据后发送
FIN。 - 客户端返回
ACK。
因为TCP是全双工通信,需双方分别关闭通道。
- 客户端发送
5. WebSocket 协议特点
问题:WebSocket 和 HTTP 长轮询的区别是什么?
答案:
-
WebSocket:
- 基于TCP的全双工通信协议,只需一次HTTP握手建立连接。
- 服务端可主动推送数据,延迟低,适合实时应用(如聊天、游戏)。
-
HTTP长轮询:
- 客户端不断轮询请求,服务器在有数据时返回,否则保持连接挂起。
- 频繁建立连接,资源消耗较高。
6. DNS 解析过程
问题:输入URL后,DNS解析的具体步骤是什么?
答案:
- 浏览器缓存 → 2. 系统(hosts文件)缓存 → 3. 本地DNS服务器 →
- 若未找到,本地DNS向根DNS、顶级域(.com)、权威DNS逐级查询,直到获取IP。
7. CDN 的作用与原理
问题:CDN 如何加速网站资源加载?
答案:
-
作用:通过分布式边缘节点缓存静态资源,减少用户与源站的物理距离。
-
原理:
- 用户请求资源时,DNS解析返回最近的CDN节点IP。
- CDN节点若有缓存直接返回,否则回源站获取并缓存。
8. HTTP 缓存策略
问题:强缓存与协商缓存的区别?相关HTTP头部有哪些?
答案:
-
强缓存:直接使用本地缓存,不向服务器请求。
- 头部:
Cache-Control: max-age=3600/Expires(绝对时间)。
- 头部:
-
协商缓存:向服务器验证资源是否过期。
- 头部:
Last-Modified+If-Modified-Since,或ETag+If-None-Match。
- 头部:
9. HTTP/2 核心改进
问题:HTTP/2 相比 HTTP/1.1 有哪些优化?
答案:
- 二进制分帧:数据以二进制帧传输,解析更高效。
- 多路复用:一个TCP连接并发处理多个请求,解决队头阻塞。
- 头部压缩:HPACK算法压缩头部大小。
- 服务器推送:服务器可主动推送资源(如CSS/JS)。
10. 安全相关:XSS 和 CSRF
问题:如何防御 XSS 和 CSRF 攻击?
答案:
-
XSS(跨站脚本攻击) :
- 转义用户输入(如
<→<)。 - 使用CSP(内容安全策略)限制资源加载。
- 转义用户输入(如
-
CSRF(跨站请求伪造) :
- 使用Token验证(如JWT)。
- 设置SameSite Cookie属性。
附加题:RESTful API 设计原则
问题:什么是RESTful API?设计时需要注意哪些原则?
答案:
-
核心原则:以资源为中心,使用HTTP方法表达操作(GET/POST/PUT/DELETE)。
-
规范:
- URI使用名词(如
/users),而非动词。 - 状态码符合语义(如200成功,201创建)。
- 版本控制(如
/api/v1/users)。
- URI使用名词(如