HTTP状态码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP状态码相关的知识,希望对你有一定的参考价值。
参考技术AResponse中应该包含一个Location URL, 说明资源现在所处的位置,客户端会使用Location中给出的URL,重新发送新的HTTP request 。
浏览器在收到 301 响应之后,从 Location 里面获取到了新的地址,并发起了新的请求。但是,这个新的请求使用的是 GET 方法而非我们原来的 POST 方法,Request Body 也丢失了。
比如某个应用进行了整站重构,重构之后 URL 发生了改变,这时候可以考虑将老 URL 重定向到新 URL。
就好比胡同口有一家我们常去的饭店,但是由于旧城改造这家店搬迁到了另一个地方。有一天我们准备去这家店吃饭,发现门口张贴告示:此店已迁移到 XXX,并附上了详细的新地址。也就是说,之后如果我还想去这家店吃饭,只能去新的地址。
永久重定向
与301的区别就是浏览器不会改变请求的 HTTP Method 和 Request Body
应用场景举例 :
通常图片资源会放到类似 S3 这样的静态资源服务器,出于对隐私和安全的考虑,我们有时不能直接通过静态资源服务器的 URL 访问到这个图片,而是需要后端通过身份凭证去 S3 签发一个临时地址(这个地址用一次就失效了,下一次需要重新签发),然后我们才能通过这个临时地址访问到真正的图片资源。
对于这个场景,302/303 就非常有用了。比如,前端可以使用一个固定的 URL 来访问图片资源 (<img src="/image/foo.jpg"),这个 URL 由后端提供,后端在生成完临时地址之后,可以直接通过 302/303 重定向到这个新的地址,接下来浏览器会再次发起请求,获取新地址指向的这个图片资源。
临时重定向
与303的区别是浏览器不会改变请求的 HTTP Method 和 Request Body
重定向:返回3**状态码+location响应头;浏览器再次访问location提供的URL。
转发:当次Http请求,直接获取要转发的URL地址并返回。
一般来说文档加载/重新加载都会产生一个 Document 类型的请求
如果是通过 fetch/XMLHttpRequest 调用所获取到的 3XX 响应,浏览器是不会改变当前地址栏的 URL 并跳转的
应用场景 :
在使用 OAuth2 鉴权时(比如微信登录),可以通过 window.location 重定向到自己服务器的授权地址(支持多个平台登录时,可以由后端统一处理),然后服务器会生成一个三方授权点的地址,并通过 302 响应告知给浏览器,浏览器在收到响应之后会跳转到这个三方授权点的 URL(微信登录页),完成授权之后,三方授权页面会通过 window.location 再重定向回我们自己的页面。
通过 window.location 再配合 302 响应,我们可以快速将用户导向三方授权点,不需要加载任何 JS,非常快速方便。
常见HTTP状态码汇总说明
参考技术A下面是工作中我们常用的15个 HTTP状态码 ,必须 牢记 哦
如果你想深入了解具体的HTTP状态码,请参考:HTTP状态码超详细说明
这个状态码是告诉客户端应该 继续发送请求 ,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终的结果
这个是 最常见 的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果。
说白了,就是 一切正常 。
表示服务器已经接受了请求,但是 还没有处理 ,而且这个请求最终会不会处理还不确定
服务器成功处理了请求,但 没有返回任何实体内容 ,可能会返回新的头部元信息
服务器已经 成功处理了部分GET请求 。
类似于FlashGet或者迅雷这类的HTTP 下载工具,都是使用此类响应实现断点续传,或者将一个大文档分解为多个下载段同时下载。
客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果。
请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。
如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。
简单的表达就是:服务端已经执行了GET,但文件未变化。
关于HTTP缓存内容可参考:一文了解HTTP缓存
Web服务器通过返回HTTP 400错误告诉访问者,访问者用来访问网站的程序出错,或访问请求途中遭到破坏。
访问者试图访问受限页面但未经授权时,网站返回HTTP 401错误。错误登录尝试是导致这一错误的主因。
403错误类似于401错误,不同之处在于401错误是未经授权,而403错误是禁止访问。 任何登录对403错误都不起作用。 尝试访问(被禁止的)网站目录时,就会发生403错误。
请求失败,客户端请求的资源没有找到或者是不存在。
也是比较常见的。
服务器遇到未知的错误,导致无法完成客户端当前的请求。
作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
服务器由于临时的服务器过载或者是维护,无法解决当前的请求,以上http状态码是服务器经常返回的状态代码,用户只能通过浏览器的状态了解服务器是否正常运行,一般除了错误的状态码,都不会看到服务器的状态码的。
以上是关于HTTP状态码的主要内容,如果未能解决你的问题,请参考以下文章