HTTP 常见状态码解析

概述

  • 1xx:指示信息--表示请求已接收,继续处理html

  • 2xx:成功--表示请求已被成功接收、理解、接受web

  • 3xx:重定向--要完成请求必须进行更进一步的操做浏览器

  • 4xx:客户端错误--请求有语法错误或请求没法实现缓存

  • 5xx:服务器端错误--服务器未能实现合法的请求服务器

常见HTTP状态码

  • 200 OK 表示请求成功 一切正常并发

  • 301 Moved Permanently 重定向,客户请求的文档在其余地方,新的URL在Location头中给出,浏览器应该自动地访问新的URLpost

  • 302 Found 临时重定向,相似于301,但新的URL应该被视为临时性的替代,而不是永久性的。搜索引擎

  • 304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还能够继续使用。spa

  • 307 Temporary Redirect 临时重定向,与302相似,只是强制要求使用POST方法。.net

  • 400 Bad Request 请求出现语法错误。

  • 401 Unauthorized 客户试图未经受权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,而后在填 写合适的Authorization头后再次发出请求。

  • 403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。一般因为服务器上文件或目录的权限设置致使

  • 404 Not Found 没法找到指定位置的资源。

  • 405 Method Not Allowed 请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)对指定的资源不适用。

  • 500 Internal Server Error 服务器遇到了意料不到的状况,不能完成客户的请求。

  • 501 Not Implemented 服务器不支持实现请求所须要的功能。

  • 502 Bad Gateway 服务器做为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

3xx 状态码详解

301 状态码(Moved Permanently) 301状态码在HTTP1.0和HTTP1.1规范中均表明永久重定向,对于post请求的重定向,仍是须要用户确认以后才能重定向,而且应该以post方法发出重定向请求。 关于post请求重定向用户确认的问题,实际上浏览器都没有实现;并且post请求的重定向应该发起post请求,这里浏览器也并不必定遵照,因此说HTTP规范的实现并未严格按照HTTP规范的语义。

302 状态码(Moved Temporatily) 在http 1.0规范中,302表示临时重定向。出现该状态代码时,浏览器可以自动访问新的URL。 规范:原请求是get,能够自动重定向;原请求是post,则不能自动进行重定向。 实现:浏览器和服务器的实现并无严格遵照HTTP中302的规范,浏览器即使原请求是post也会自动重定向,致使规范和实现出现了二义性,由此衍生了一些问题,譬如302劫持,所以在HTTP 1.1中将302的规范细化成了303和307,但愿以此来消除二义性。

补充:302劫持——A站经过重定向到B站的资源xxoo,A站实际上什么都没作可是有一个比较友好的域名,web资源xxoo存在B站并由B站提供,可是B站的域名不那么友好,所以对搜索引擎而言,可能会保存A站的地址对应xxoo资源而不是B站,这就意味着B站出了资源版权、带宽、服务器的钱,可是用户经过搜索引擎搜索xxoo资源的时候出来的是A站,A站什么都没作却被索搜引擎广而告之用户,B站作了一切却不被用户知道,价值被A站窃取了。

303 状态码(See Other) 继承了HTTP 1.0中302的实现:不管原请求是get仍是post,均可以自动进行重定向 303响应应该禁止被缓存。重定向的相应可能被缓存。

307 状态码 继承了HTTP 1.0中302的规范:原请求是GET 或 HEAD,则浏览器能够自动重定向;原请求是 POST,则不能自动进行重定向。

30二、30三、307 状态码辨析 在HTTP 1.1中,302是再也不推荐使用的,只是为了兼容而做保留。为了细化HTTP1.0中302的语义,HTTP1.1引入了 303 和 307,主要用在对非 GET、HEAD 方法的响应上,而对于 GET 和 HEAD 的请求,能够自动重定向。

在 GET、HEAD 这些幂等的请求方式上,30二、30三、307 没啥区别,而对于 POST 就不一样了,大部分浏览器的302 会将 POST 请求转为 GET,而 303 规范强制将 POST 转为 GET 请求,请求地址为 header 头中的 Location,307 则不同,规范要求浏览器继续向 Location 的地址 POST 内容。

:memo: 303 和 307 的存在,归根结底是因为 POST 方法的非幂等属性引发的。

参考

HTTP状态码 HTTP状态码 HTTP状态码详解 http重定向301/302/303/307

img

相关文章
相关标签/搜索