美文网首页
HTTP状态码

HTTP状态码

作者: 欢西西西 | 来源:发表于2022-04-29 16:33 被阅读0次

    https://datatracker.ietf.org/doc/html/rfc7231#section-6.1

    一、4XX - 客户端错误

    400 Bad Request
    401 Unauthorized
    414 Request-URI Too Large
    403 Forbidden
    404 Not Found
    405 Method Not Allowed

    409 Conflict


    image.png

    二、5XX - 服务端错误

    500 Internal Server Error
    502 Bad Gateway
    503 Service Unavailable
    504 Gateway Time-out

    三、3XX - 重定向

    重定向状态码是服务器告诉客户端,它们访问的资源已被移动
    ① 服务器发送一个重定向状态码和一个可选的Location Header, 告诉客户端新的资源地址在哪。
    ② 客户端会自动用Location中提供的地址,重新发送新的Request。
    ③ 这个过程对用户来说是透明的。

    301 (Moved Permanently )

    资源已被永久移动到由location头部指定的URL上
    永久重定向

    ① Response中应该包含一个 Location URL, 说明资源现在所处的位置,客户端会使用Location中给出的URL,重新发送新的HTTP request 。

    ② 浏览器在收到 301 响应之后,从 Location 里面获取到了新的地址,并发起了新的请求。但是,这个新的请求使用的是 GET 方法而非我们原来的 POST 方法,Request Body 也丢失了

    308(Permanent Redirect)

    与301的区别就是浏览器不会改变请求的 HTTP Method 和 Request Body
    永久重定向

    302(Found)/ 303(See Other)

    临时重定向
    浏览器在收到 303 响应之后,除 GET 方法保持不变之外,其他所有方法都会被改为 GET 方法,同时 Request Body 也会丢失。大多数浏览器会将 302 请求视为 303 请求

    image.png image.png

    应用场景举例

    通常图片资源会放到类似 S3 这样的静态资源服务器,出于对隐私和安全的考虑,我们有时不能直接通过静态资源服务器的 URL 访问到这个图片,而是需要后端通过身份凭证去 S3 签发一个临时地址(这个地址用一次就失效了,下一次需要重新签发),然后我们才能通过这个临时地址访问到真正的图片资源。

    对于这个场景,302/303 就非常有用了。比如,前端可以使用一个固定的 URL 来访问图片资源 (<img src="/image/foo.jpg"),这个 URL 由后端提供,后端在生成完临时地址之后,可以直接通过 302/303 重定向到这个新的地址,接下来浏览器会再次发起请求,获取新地址指向的这个图片资源。

    307(Temporary Redirect)

    临时重定向
    与303的区别是浏览器不会改变请求的 HTTP Method 和 Request Body

    image.png
    image.png
    image.png

    重定向与转发

    -
    重定向.png - 转发.png
    重定向:返回3**状态码+location响应头;浏览器再次访问location提供的URL 转发:当次Http请求,直接获取要转发的URL地址并返回

    window.location + 3XX 响应

    一般来说文档加载/重新加载都会产生一个 Document 类型的请求

    如果是通过 fetch/XMLHttpRequest 调用所获取到的 3XX 响应,浏览器是不会改变当前地址栏的 URL 并跳转的

    应用场景

    1. 第三方授权
      在使用 OAuth2 鉴权时(比如微信登录),可以通过 window.location 重定向到自己服务器的授权地址(支持多个平台登录时,可以由后端统一处理),然后服务器会生成一个三方授权点的地址,并通过 302 响应告知给浏览器,浏览器在收到响应之后会跳转到这个三方授权点的 URL(微信登录页),完成授权之后,三方授权页面会通过 window.location 再重定向回我们自己的页面。
      通过 window.location 再配合 302 响应,我们可以快速将用户导向三方授权点,不需要加载任何 JS,非常快速方便。

    2. 重构后
      比如某个应用进行了整站重构,重构之后 URL 发生了改变,这时候可以考虑将老 URL 重定向到新 URL。

    四、2XX

    206 Partial Content 部分内容

    请求一个1000字节的文件的前500字节
    Content-Length: 500
    Content-Range: bytes 0-499/1000
    
    • 下面这个例子实际响应了整个文件


      image.png
    image.png

    204 No Content 无响应体

    • 这是一个上传文件的例子


      image.png
    image.png

    五、1XX

    100-continue

    表示服务端接收到请求的第一部分,正在等待其余部分
    想接收到这样的状态码,首先,请求时应该带上请求头:Expect: 100-continue
    类似于发送大量数据前先做服务端校验,如果返回100,则继续发送,不是100的话就不发送后续数据了。

    六、各种failed原因

    企业微信截图_1708243476242.png image.png image.png

    net::ERR_NAME_NOT_RESOLVED:浏览器无法解析主机名(网络问题、DNS问题、或主机名不正确)
    net::ERR_CONNECTION_TIMED_OUT:浏览器在规定时间内无法与服务端建立连接
    net::ERR_CONNECTION_RESET:浏览器尝试与服务器建立连接时连接被中断(可能是防火墙设置问题)
    net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION:服务器在响应头部中设置了多个 Content-Disposition 字段
    net::ERR_BLOCKED_BY_CLIENT:表示请求被浏览器拦截(可能是由于安装了某些拦截广告的浏览器插件)

    相关文章

      网友评论

          本文标题:HTTP状态码

          本文链接:https://www.haomeiwen.com/subject/momsyrtx.html