代码随想录 | 八股-HTTP请求2
HTTP中常见的状态码有哪些?
HTTP 状态码用于表明特定HTTP请求是否完成
1xx 信息响应(100–199)
✅“我听到了,继续吧”
表示请求已接收,继续处理
- 100 Continue:初始部分已接收,客户端应继续发送。
- 101 Switching Protocols:服务器:同意更改协议。
- 102 Processing:服务器:已收到,正在处理。
2xx 成功响应(200–299)
表示请求已成功接收
🎉“你请求的事我办妥了”
- 200 OK:请求成功。
- 201 Created:请求成功并创建了新的资源(例如注册)
- 202 Accepted:请求已接受,但未响应 -不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求
- 204 No Content:请求成功,但无返回内容。
- 206 Partial Content:当从客户端发送Range范围标头以只请求资源的一部分时,使用此响应代码(例如断点续传)
3xx 重定向(300–399)
表示需要进一步操作以完成请求。
🔀“去别处找”
- 301 Moved Permanently:请求的资源已永久移动到新位置。
- 302 Found:请求的资源临时从不同的 URI 响应请求。
- 303 See Other:请求应使用另一个 URI 获取资源。
- 304 Not Modified:资源未修改,可使用缓存。
- 307 Temporary Redirect:请求的资源临时从不同的 URI 响应请求,方法不变。
- 308 Permanent Redirect:请求的资源已永久移动到新位置,方法不变。
4xx 客户端错误(400–499)
表示请求包含语法错误或无法完成
- 400 Bad Request:请求无效,服务器无法理解。
- 401 Unauthorized:请求要求客户端身份认证。
- 403 Forbidden:服务器知道客户端身份,但客户端没有访问权限
- 404 Not Found:请求的资源未找到。
- 405 Method Not Allowed:请求方法被禁止。
- 408 Request Timeout:请求超时。
- 429 Too Many Requests:客户端发送的请求过多,已被限制。
5xx 服务器错误(500–599)
表示服务器未能完成合法的请求。
- 500 Internal Server Error:服务器内部错误,无法完成请求。
- 501 Not Implemented:服务器不支持请求的功能。
- 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到错误响应。
- 503 Service Unavailable:服务器当前无法处理请求。
- 504 Gateway Timeout:服务器作为网关或代理,未及时从上游服务器收到响应。
什么是强缓存和协商缓存
🌟一、强缓存(完全不发请求)
关键词:直接使用缓存,不访问服务器
✅ 特点:
- 浏览器直接使用本地缓存资源。
- 不向服务器发请求。
- 若命中强缓存,状态码为
200 (from memory cache)
或200 (from disk cache)
。
📌 实现方式:
字段 | 说明 |
---|---|
Cache-Control: max-age=秒数 | (相对时间,更准确)当前资源在 N 秒内有效✅推荐 |
Expires: GMT时间 | (绝对时间,受本地时间影响)指定资源过期时间❌已过时 |
首次访问资源:
服务器返回资源时在响应头加上Cache-Control: max-age=秒数
,告知浏览器这个资源可以缓存多久。再次访问时:
浏览器会用“当前时间 - 缓存时间”与max-age
做比较:- 没过期 → 直接用缓存,不发请求。
- 过期 → 发起新请求,向服务器重新获取资源。
服务器响应更新:
每次服务器响应时都会更新Cache-Control
,供下一轮缓存使用。
🔄二、协商缓存(发请求,服务器决定是否使用缓存)
关键词:发请求,比较“资源是否改过”
✅ 特点:
- 请求时会向服务器询问资源是否有更新。
- 如果没变,返回 304 Not Modified,继续用本地缓存。
- 如果变了,返回 200 + 新资源。
📌 两种主流方式:
方式 | 请求头字段 | 响应头字段 | 原理 | 优缺点简析 |
---|---|---|---|---|
Last-Modified | If-Modified-Since |
Last-Modified |
比较“上次修改时间” | ⛔秒级精度、不改内容也可能变时间 |
ETag | If-None-Match |
ETag |
比较“文件指纹/哈希” | ✅更精准,内容变才更新 |
🔁三、常见误区与补充
- 强缓存命中 → 不发请求
- 强缓存失效 → 发请求,进入协商缓存阶段
- 如果协商缓存也失效,才真正下载新资源。