面试总问http状态码?收藏这一篇就够了!

264 阅读2分钟

http常见状态码

信息响应 - 1xx

  • 101 websocket

成功响应 - 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