http常见状态码
信息响应 - 1xx
成功响应 - 2xx
- 200 响应成功
- 204 没有响应体
- 206 范围请求,应用场景:断点下载
重定向 - 3xx
- 301 永久重定向(记忆点:1 == 一直)
- 302 临时重定向
- 304 文件未改变(对比缓存)
- 307 临时重定向响应状态码
302 与 307 的区别
当发送重定向请求的时候,307 状态码可以确保请求方法和消息主体不会发生变化。
如果使用 302 响应状态码,一些旧客户端会错误地将请求方法转换为 GET。
对于 GET 请求来说,两种情况没有区别。
对比缓存与强制缓存的区别
1. 强制缓存 不向服务器发送请求
html一般不会被强制缓存,
css,js,image等资源性文件可以走强制缓存
服务器通过设置响应头来告诉浏览器强制缓存
cache-control: max-age=xxx(单位: 秒)
expires: 时间字符串(GMT, UTC均可)
2. 对比缓存 即协商缓存 去服务器对比文件是否改变
服务器根据文件的修改时间判断是否需要返回新文件,
如果文件未变化,只需要返回 304 状态码即可
服务器第一次返回时,设置响应头
Last-Modified: 时间字符串(GMT, UTC均可)
Etag: 文件的指纹(文件修改时,服务器需要生成新的指纹)
下次浏览器请求时会自带响应头
If-Modified-Since 对应 Last-Modified
If-None-Match 对应 Etag
此时服务器可以通过 判断这两个值是否一致,来决定是否返回 304
3. cache-control 详解
设置过期时间: max-age=xxx(单位: 秒)
不直接取缓存: no-catch
完全不保存缓存: no-store
客户端响应 - 4xx
- 400 前端参数错误
- 401 没有登陆
- 403 登录,但依旧没有权限
- 404 话不多说
- 405 method不支持
- 429 请求太频繁
服务端响应 - 5xx
- 500 服务器遇到未知错误
- 502 网关错误
- 503 服务不可用
- 504 网关超时
- 505 http版本不支持
其他不太常见的状态码
- 201 Created 这通常是在POST请求,或是某些PUT请求之后返回的响应。
- 202 Accepted 请求已经接收到,但还未响应,没有结果。(服务器"哦"了一声)
- 305 被请求的资源必须通过指定的代理才能被访问(不推荐)
- 408 请求超时,客户端可以再次请求
- 506 内部服务器配置错误
- 507 服务器不能存储相关内容
参考文献
[1] MDN
[2] Koa