HTTP主要讲一下状态码和缓存机制
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,如http升级为websocket,会提示1xx
2xx 类状态码表示服务器成功处理了客户端的请求
- 「200 OK」是最常见的成功状态码
- 「204 No Content」也是常见的成功状态码,但没返回任何数据
- 「206 Partial Content」服务器成功处理了部分请求,并返回了资源的一部分(HTTP 分块下载或断点续传)
3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向
- 「301 Moved Permanently」表示永久重定向,需改用新的 URL 再次访问
- 「302 Found」表示临时重定向,暂时需要用另一个 URL 来访问
- 「304 Not Modified」表示客户端请求的资源没有变化,可以直接使用本地缓存,而无需重新下载
4xx 类状态码表示客户端发送的报文有误,服务器无法处理
- 「400 Bad Request」表示客户端请求的报文有错误(笼统的错误)
- 「403 Forbidden」表示客户端没有权限访问该资源
- 「404 Not Found」表示请求的资源在服务器上不存在
5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务端的错误码
- 「500 Internal Server Error」表示服务端内部出现问题(笼统的错误)
- 「501 Not Implemented」表示客户端请求的功能还没有实现
- 「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误
- 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端
HTTP缓存:有两种实现方式
- 强制缓存是指只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存
- 当浏览器第一次请求访问服务器资源时,服务器会在返回这个资源的同时,在 Response 头部加上 Cache-Control、Expires
Cache-Control: max-age=3600
Expires: Wed, 21 Oct 2025 07:28:00 GMT (Cache-Control 优先级更高) - 浏览器再次请求访问服务器中的该资源时,会先通过请求资源的时间与 Cache-Control 中设置的过期时间大小,来计算出该资源是否过期,如果没有,则使用该缓存,否则重新请求服务器
- 服务器再次收到请求后,会再次更新 Response 头部的 Cache-Control
- 当浏览器第一次请求访问服务器资源时,服务器会在返回这个资源的同时,在 Response 头部加上 Cache-Control、Expires
- 协商缓存是指浏览器在请求资源时,会与服务器进行协商,决定是否使用本地缓存
- 浏览器发出请求时,会携带一些标识信息,如If-Modified-Since(在某时起该资源是否被修改过)、ETag标识某个资源
If-Modified-Since: Wed, 21 Oct 2025 07:28:00 GMT
ETag: "abcdef12345"
- 服务器根据这些信息判断缓存是否有效:
- 如果缓存有效,服务器返回304 Not Modified,浏览器使用缓存
- 如果缓存无效,服务器返回新的资源和更新的缓存信息
- 如果缓存有效,服务器返回304 Not Modified,浏览器使用缓存