网络面试题¶
HTTP与Web安全¶
1. TCP三次握手和四次挥手过程¶
- 三次握手: 建立连接
- SYN: 客户端发送SYN(同步序列编号)标志的数据包,请求建立连接。
- SYN-ACK: 服务器收到SYN后,回复一个SYN-ACK(同步确认)标志的数据包,表示同意建立连接。
- ACK: 客户端收到SYN-ACK后,发送一个ACK(确认)标志的数据包,表示连接已建立。
- 四次挥手: 断开连接
- FIN: 客户端发送FIN(结束)标志的数据包,请求断开连接。
- ACK: 服务器收到FIN后,发送一个ACK标志的数据包,表示同意断开连接请求。
- FIN: 服务器发送一个FIN标志的数据包,请求断开连接。
- ACK: 客户端收到FIN后,发送一个ACK标志的数据包,表示连接已断开。
2. TCP与UDP区别?TCP 协议怎么保证可靠的,UDP 为什么不可靠?应用场景?¶
- TCP: 面向连接、可靠、基于字节流的传输层协议。
- UDP: 无连接、不可靠、基于数据报的传输层协议。
TCP如何保证可靠性: 校验和、序列号、确认应答、超时重传、流量控制、拥塞控制。
UDP为什么不可靠: 不保证消息交付、不保证交付顺序、不跟踪连接状态。
应用场景:
- TCP: 文件传输、电子邮件、Web浏览
- UDP: 在线游戏、视频会议、DNS
3. 滑动窗口、拥塞控制¶
- 滑动窗口: TCP使用滑动窗口协议进行流量控制。
- 拥塞控制: 防止过多的数据注入网络,导致网络过载。
4. GET和 POST的区别¶
- GET: 从服务器获取数据,幂等,参数在URL中,不安全。
- POST: 向服务器提交数据,非幂等,参数在请求体中,相对安全。
5. HTTP状态码有哪些,301和302有什么区别¶
- 1xx: 信息性响应
- 2xx: 成功响应
- 3xx: 重定向
- 4xx: 客户端错误
- 5xx: 服务器错误
301 vs 302:
- 301 Moved Permanently: 永久重定向
- 302 Found: 临时重定向
6. 浏览器HTTP请求数目限制,怎么解决¶
- 原因: 防止对服务器造成过大压力。
- 解决方法: 合并文件、使用CDN、使用多个域名。
7. 长链接、短链接、如何断开长链接¶
- 长链接: 一次TCP连接可以发送多个HTTP请求。
- 短链接: 每个HTTP请求都需要建立一个新的TCP连接。
- 断开长链接: 客户端或服务器端都可以发起关闭连接的请求。
8. HTTP 1.0&1.1&2区别¶
- HTTP/1.0: 短链接,无Host头,不支持断点续传。
- HTTP/1.1: 长链接,有Host头,支持断点续传,支持管道化。
- HTTP/2: 二进制分帧,多路复用,头部压缩,服务器推送。
9. HTTP2特性¶
- 二进制分帧: 将HTTP消息分解为独立的帧。
- 多路复用: 在一个TCP连接上并行发送多个请求和响应。
- 头部压缩: 使用HPACK算法压缩HTTP头部。
- 服务器推送: 服务器可以主动向客户端推送资源。
10. HTTP2如何加密¶
HTTP/2 本身不要求加密,但浏览器普遍要求HTTP/2必须运行在HTTPS之上。
11. 缓存的处理过程?强缓存/弱缓存?¶
- 强缓存: 浏览器不会向服务器发送请求,直接从本地缓存中读取资源。通过
Expires
和Cache-Control
控制。 - 协商缓存: 浏览器向服务器发送请求,服务器根据请求头中的
Last-Modified
和ETag
判断资源是否更新,如果未更新,返回304状态码,浏览器从本地缓存中读取资源。
12. 请求头字段和响应头字段,如何设置不用缓存¶
Cache-Control: no-cache, no-store, must-revalidate
13. HTTPS加密过程、证书是什么¶
- HTTPS加密过程: TLS/SSL握手
- 证书: 由受信任的证书颁发机构(CA)颁发的数字证书,用于验证服务器的身份。
14. 登录鉴权有哪些方式?登录持久化怎么实现的?¶
- 鉴权方式:
Cookie-Session
,Token
(JWT),OAuth
- 持久化:
Cookie
,localStorage
,sessionStorage
15. JWT,access token、refresh token的作用分别是什么,存放在哪儿,具体流程?¶
- JWT (JSON Web Token): 一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为JSON对象。
access_token
: 用于访问受保护的资源。refresh_token
: 用于获取新的access_token
。- 存放位置:
Cookie
,localStorage
- 流程: 客户端使用用户名和密码请求
access_token
和refresh_token
。access_token
用于访问API,过期后使用refresh_token
获取新的access_token
。
其他¶
- URL 输入的过程: DNS解析 -> TCP连接 -> 发送HTTP请求 -> 服务器处理请求并返回HTTP报文 -> 浏览器解析渲染页面 -> 断开连接
- DNS 解析过程: 浏览器缓存 -> 系统缓存 -> 路由器缓存 -> ISP DNS缓存 -> 根域名服务器 -> ...