计算机网络基础知识梳理(2)
作者:没有四次元口袋的蓝胖
日期:2026-08-03
标签:Java, HTTP, HTTPS, 状态码, GET/POST, 计算机网络
HTTP 是 Java 面试的高频考点。核心掌握:HTTP 与 HTTPS 的区别、常见状态码、GET 与 POST 的差异。
一、HTTP 与 HTTPS 区别
1.1 对比表
| 维度 | HTTP | HTTPS |
|---|---|---|
| 全称 | HyperText Transfer Protocol | HTTP Secure |
| 端口 | 80 | 443 |
| 安全性 | 明文传输,不安全 | SSL/TLS 加密,安全 |
| 证书 | 不需要 | 需要 CA 证书 |
| 性能 | 快(无加密开销) | 稍慢(加解密开销) |
| SEO | 不友好 | 友好(搜索引擎优先) |
1.2 HTTPS 加密过程
HTTPS = HTTP + SSL/TLS,通过非对称加密 交换密钥,再用对称加密传输数据。
1. 客户端发起 HTTPS 请求,发送支持的加密算法
2. 服务端返回数字证书(含公钥)
3. 客户端验证证书合法性(CA 签发、域名匹配、有效期)
4. 客户端生成随机密钥,用公钥加密后发送给服务端
5. 服务端用私钥解密,得到对称密钥
6. 双方用对称密钥加密通信
为什么混合加密?
- 非对称加密安全但慢 → 用于交换密钥
- 对称加密快但密钥分发不安全 → 用于实际通信
1.3 数字证书
作用:证明"这个公钥确实是服务端的"。
内容:
- 服务端公钥
- 域名
- 有效期
- CA 签名
验证流程:
客户端收到证书
↓
用浏览器内置的 CA 公钥验证签名
↓
签名合法 → 证书可信
签名非法 → 证书不可信,拒绝连接
二、HTTP 状态码
2.1 状态码分类
| 类别 | 含义 | 常见状态码 |
|---|---|---|
| 1xx | 信息性 | 100 Continue(继续请求) |
| 2xx | 成功 | 200 OK、201 Created、204 No Content |
| 3xx | 重定向 | 301 永久重定向、302 临时重定向、304 未修改 |
| 4xx | 客户端错误 | 400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found |
| 5xx | 服务端错误 | 500 Internal Server Error、502 Bad Gateway、503 Service Unavailable |
2.2 高频状态码详解
2xx 成功类
| 状态码 | 含义 | 场景 |
|---|---|---|
| 200 | OK | 请求成功,返回数据 |
| 201 | Created | 资源创建成功(POST/PUT) |
| 204 | No Content | 请求成功但无返回内容 |
3xx 重定向类
| 状态码 | 含义 | 区别 |
|---|---|---|
| 301 | Moved Permanently | 永久重定向,搜索引擎会更新索引 |
| 302 | Found | 临时重定向,搜索引擎保留原 URL |
| 304 | Not Modified | 资源未修改,使用缓存 |
面试区分:301 是永久的(资源已搬家),302 是临时的(资源暂时在这)。
4xx 客户端错误
| 状态码 | 含义 | 常见原因 |
|---|---|---|
| 400 | Bad Request | 请求参数错误、格式不对 |
| 401 | Unauthorized | 未登录或 Token 过期 |
| 403 | Forbidden | 已登录但无权限 |
| 404 | Not Found | 资源不存在 |
| 405 | Method Not Allowed | 请求方法不支持(如 POST 接口用 GET) |
面试区分:401 是"你是谁"(未认证),403 是"你不配"(无权限)。
5xx 服务端错误
| 状态码 | 含义 | 常见原因 |
|---|---|---|
| 500 | Internal Server Error | 服务器内部异常(代码报错) |
| 502 | Bad Gateway | 网关错误(如 Nginx 转发失败) |
| 503 | Service Unavailable | 服务不可用(过载或维护) |
| 504 | Gateway Timeout | 网关超时(上游服务响应慢) |
三、GET 与 POST 区别
3.1 对比表
| 维度 | GET | POST |
|---|---|---|
| 语义 | 获取资源 | 提交数据 |
| 参数位置 | URL(?key=value) | 请求体 |
| 参数长度 | 有限制(URL 长度限制,约 2KB) | 无限制 |
| 安全性 | 较低(参数暴露在 URL) | 相对较高 |
| 缓存 | 可被缓存 | 默认不缓存 |
| 幂等性 | 幂等(多次请求结果相同) | 非幂等 |
| 浏览器回退 | 无害(重新获取) | 可能重新提交 |
| 报文 | 只有一个 TCP 包 | 可能两个(先发 Header,再发 Body) |
3.2 幂等性
幂等:多次执行同一操作,结果与执行一次相同。
| 方法 | 是否幂等 | 说明 |
|---|---|---|
| GET | 是 | 查询操作,多次查询结果不变 |
| POST | 否 | 提交操作,多次提交可能创建多个资源 |
| PUT | 是 | 更新操作,多次更新结果不变 |
| DELETE | 是 | 删除操作,删除已存在的资源结果不变 |
3.3 实际开发中的选择
GET 适用场景:
- 查询数据
- 参数简单、无敏感信息
- 希望结果可缓存、可收藏
POST 适用场景:
- 提交表单
- 参数复杂或包含文件
- 包含敏感信息(密码、身份证号)
- 创建或修改资源
四、Cookie 与 Session
4.1 为什么需要它们?
HTTP 是无状态协议,服务器无法识别"你是你"。Cookie 和 Session 用于保持状态。
4.2 Cookie
存储位置:客户端(浏览器)
工作流程:
1. 服务端返回 Set-Cookie: userId=123
2. 浏览器保存 Cookie
3. 后续请求自动携带 Cookie: userId=123
4. 服务端根据 Cookie 识别用户
特点:
- 存储在客户端,不安全
- 大小限制 4KB
- 可设置过期时间
4.3 Session
存储位置:服务端
工作流程:
1. 用户登录,服务端创建 Session(sessionId)
2. 服务端返回 sessionId(通过 Cookie 或 URL)
3. 客户端后续请求携带 sessionId
4. 服务端根据 sessionId 查找 Session 数据
特点:
- 存储在服务端,安全
- 无大小限制
- 依赖 Cookie 或 URL 重写传递 sessionId
4.4 Cookie vs Session
| 维度 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端 | 服务端 |
| 安全性 | 较低 | 较高 |
| 大小限制 | 4KB | 无限制 |
| 性能 | 不占用服务端资源 | 占用服务端内存 |
| 有效期 | 可设置过期时间 | 依赖 Cookie 或配置 |
面试回答模板:Cookie 存在客户端,不安全但节省服务端资源;Session 存在服务端,安全但占用内存。通常 Session 的 sessionId 通过 Cookie 传递给客户端。
五、HTTP/1.1 vs HTTP/2 vs HTTP/3
| 版本 | 特性 |
|---|---|
| HTTP/1.0 | 每次请求都需要建立连接 |
| HTTP/1.1 | 持久连接(Keep-Alive)、管道化、分块传输 |
| HTTP/2 | 多路复用、头部压缩、服务器推送、二进制分帧 |
| HTTP/3 | 基于 QUIC(UDP)、解决队头阻塞、更快的握手 |
5.1 HTTP/1.1 的问题
队头阻塞:同一连接上,前面的请求未响应,后面的请求必须等待。
请求 1 ━━━━━━━━━━━━━━━━ 响应 1
请求 2 ━━━━━等待━━━━━━━ 响应 2 ← 被请求 1 阻塞
请求 3 ━━━━━━━━等待━━━━━ 响应 3
5.2 HTTP/2 的改进
多路复用:多个请求共享同一连接,互不阻塞。
请求 1 ━━ 响应 1
请求 2 ━━━━ 响应 2 ← 并发传输
请求 3 ━━━━━ 响应 3
🗺️ 思维导图速览
HTTP 核心知识
├── HTTP vs HTTPS
│ ├── 端口:80 vs 443
│ ├── 加密:明文 vs SSL/TLS
│ └── 证书:不需要 vs CA 证书
├── 状态码
│ ├── 2xx 成功(200、201、204)
│ ├── 3xx 重定向(301、302、304)
│ ├── 4xx 客户端错误(400、401、403、404)
│ └── 5xx 服务端错误(500、502、503)
├── GET vs POST
│ ├── 参数位置:URL vs 请求体
│ ├── 安全性:低 vs 高
│ ├── 幂等性:是 vs 否
│ └── 缓存:可缓存 vs 默认不缓存
├── Cookie vs Session
│ ├── 存储:客户端 vs 服务端
│ └── 安全性:低 vs 高
└── HTTP 版本
├── 1.1:持久连接、队头阻塞
├── 2:多路复用、头部压缩
└── 3:基于 QUIC(UDP)
📝 写在最后
学习建议
- 状态码要分类记忆:2xx 成功、3xx 重定向、4xx 客户端、5xx 服务端,面试常问"401 和 403 的区别"
- GET vs POST 要对比记忆:参数位置、安全性、幂等性、缓存
- HTTPS 加密流程要理解:非对称加密交换密钥,对称加密传输数据
- Cookie vs Session 要知道优缺点:Cookie 不安全但省资源,Session 安全但占内存
面试回答模板
Q:HTTP 和 HTTPS 的区别?
HTTP 端口 80,明文传输,不安全;HTTPS 端口 443,通过 SSL/TLS 加密,安全。HTTPS 先用非对称加密交换密钥,再用对称加密传输数据,兼顾安全和性能。
Q:GET 和 POST 的区别?
GET 参数在 URL 中,长度受限,不安全但可缓存,幂等;POST 参数在请求体,长度无限制,相对安全,默认不缓存,非幂等。GET 用于查询,POST 用于提交。
Q:说说 HTTP 状态码?
状态码分五类:2xx 成功(200 OK、201 Created);3xx 重定向(301 永久、302 临时、304 未修改);4xx 客户端错误(400 参数错误、401 未认证、403 无权限、404 不存在);5xx 服务端错误(500 内部异常、502 网关错误、503 服务不可用)。401 是"你是谁",403 是"你不配"。