美文网首页
关于HTTP状态码

关于HTTP状态码

作者: QuietHeart | 来源:发表于2020-12-05 23:07 被阅读0次

    本文将对http协议中的状态码进行总结。

    整体分类

    HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
    分类分类描述
    1**信息,服务器收到请求,需要请求者继续执行操作
    2**成功,操作被成功接收并处理
    3**重定向,需要进一步的操作以完成请求
    4**客户端错误,请求包含语法错误或无法完成请求
    5**服务器错误,服务器在处理请求的过程中发生了错误
    

    一个相对完整的概括:

    当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
    ① 客户方错误
    100  继续
    101  交换协议
    ② 成功
    200  OK
    201  已创建
    202  接收
    203  非认证信息
    204  无内容
    205  重置内容
    206  部分内容
    ③ 重定向
    300  多路选择
    301  永久转移
    302  暂时转移
    303  参见其它
    304  未修改(Not Modified)
    305  使用代理
    ④ 客户方错误
    400  错误请求(Bad Request)
    401  未认证
    402  需要付费
    403  禁止(Forbidden)
    404  未找到(Not Found)
    405  方法不允许
    406  不接受
    407  需要代理认证
    408  请求超时
    409  冲突
    410  失败
    411  需要长度
    412  条件失败
    413  请求实体太大
    414  请求URI太长
    415  不支持媒体类型
    ⑤ 服务器错误
    500  服务器内部错误
    501  未实现(Not Implemented)
    502  网关失败
    504  网关超时
    505 HTTP版本不支持
    

    1**状态,部分请求

    100, 客户端应当继续,并没有拒绝,客户端应当发送剩余部分
    101, 理解了客户端请求,通过Upgrade通知客户端采用不同协议(只有有好处时才这样切换协议)
    102, WebDav扩展,处理将被继续执行
    

    2**状态,成功

    200, 请求成功并将返回
    201, 请求实现,并且建立资源
    202, 请求接受,提前返回,并将异步处理不保证完全成功
    203, 请求成功,并返回非原始信息,与200相对
    204, 请求成功,只返回实体头部没有内容,并且客户端不更新视图(但是可能会使用返回信息中的最新变量等)
    205, 请求成功,只返回实体头部没有内容,并且客户端更新视图(比如重置表单便于后续输入)
    206, 部分GET请求,比如断点续传(Content-Range, Content-Length, multipart/byteranges多段下载的Content-Type,Date/ETag/Expire,Catch-Control,If-Range, Last-Modified等等)
    207, WebDav扩展,之后将有XML消息并有独立的响应代码。
    

    关于204的应用,来源:https://www.runoob.com/http/http-header-fields.html

    响应头中的Refresh,表示浏览器应该在多少时间之后刷新文档,还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。 也可通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,Refresh的意义是"N秒之后刷新本页面或访问指定页面",而不是"每隔N秒刷新本页面或访问指定页面"。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。 
    注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。
    

    3**状态,重定向

    300, 会有一个可选列表让用户或浏览器自行选择其一进行重定向,非HEAD要有列表实体(Content-Type规定格式),响应Location指定首选URI,默认缓存响应。
    301, 永久转移,后将用备选新URI(可能用新URI替换请求)。新永久URI响应Location指定,默认缓存。非HEAD给出实体URI链接和描述。非GET/HEAD不重定向。
    注:某些HTTP/1.0浏览器POST得到301响应后,后续的重定向将变为GET方式。
    302, 临时重定向,仍用原有地址,新URI响应Location指定,借助Cache-Control/Expire缓存响应,非HEAD给出实体URI链接和描述。非GET/HEAD不重定向。
    注:很多现存浏览器将302视作303,并用GET访问Location的URI,而无视原先请求的方法。借助303/307用以明确服务端期待客户端进行何种反应。
    303, 新URI在相应Location给出不替代原始URI,客户端应用GET方式从新URI访问,禁止缓存但是第二个请求可以被缓存。非HEAD给出实体URI链接和描述。
    注:许多HTTP/1.1以前的浏览器不理解303,但是从浏览器互动角度302可以胜任,因为多数客户端实现302的响应就是要求客户端处理303的响应。
    304,带有条件的GET请求,文档内容没变,没有消息体。响应头必须有:Date,ETag和/或Content-Location,Expires,Cache-Control和/或Vary
    请求使用弱缓存验证(条件GET),响应无实体头避免与内容不一致,请求使用强缓存验证,则不应该包含实体头。
    响应指明某实体未缓存则缓存系统忽视响应,并重新发送无限制条件请求;304响应要求更新某缓存条目则缓存系统更新。
    305, 通过代理访问,Location指定代理URI,接收者重复发送单独请求,通过代理访问。只有原始服务器才能建立305响应。
    注:305并未明确是为重定向单独请求,而是只被原始服务器建立。
    306,废弃。
    307, 临时重定向地址在响应Location中,继续以原址请求,只能借助Cache-Control/Expire才能缓存,非HEAD给出实体URI链接和描述。非GET/HEAD不重定向。
    

    关于304的解释,来源:https://www.runoob.com/http/http-header-fields.html

    响应头中的Last-Modified会用到,该头标识
    文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。
    

    关于302的解释,来源:https://www.runoob.com/http/http-header-fields.html

    响应头中的Location,表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
    

    4**状态客户端错误

    400, 请求语义有误不应重复提交、参数有误。
    401, 要求用户验证。响应包含WWW-Authenticate信息,请求包含相应的Authorization证书。401表示拒绝相应证书。
    402, 预留。
    403, 理解请求但拒绝执行。不能重复提交也与验证无关的拒绝。非HEAD服务器可在实体描述拒绝的原因;或404不让客户端获取任何信息。
    404, 请求失败,被请求资源未找到。并不提示状况是否永久,若服务器知道情况应用410表明旧资源永久无用并无跳转,404广泛用于不想告知原因及无合适响应情形。
    405, 不能使用请求行中方法请求资源。响应通过Allow来指明接收的方法列表。大多数网页服务器不支持PUT, DELETE等对服务器写操作的请求,响应此405错误。
    406, 资源内容无法满足请求头条件,无法生成响应实体。非HEAD请求响应返回列表实体,让用户或浏览器选择合适的特性及地址,实体格式Content-Type定义。
    407, 类似401响应, 需要在代理服务器上身份验证。代理服务器返回Proxy-Authenticate询问,请求返回Proxy-Authorization信息头以验证。
    408, 请求超时。服务器等待时间内客户端未完成请求发送,可以随时重新请求。
    409, 被请求资源冲突请求无法完成。用户能解决冲突且可重新提交时响应该代码,响应含帮助发现冲突源的信息。如通常PUT请求会有409错误,与之前的别人请求冲突可能给出差异。
    410, 资源已永久性不可用,且不含转发地址。响应可缓存,如服务器无法确定是否永久,可以使用404。主要用于维护网站,如限时、增值服务及个人资源不可用等。
    411, 在没有Content-Length头定义时,服务器拒绝请求。添加请求消息长度的Content-Length后,客户端可重新发请求。
    412, 服务器验证没能满足条件。这允许客户端在请求头设置先决条件,避免请求方法用在希望之外的资源上。
    413, 拒绝处理请求。请求的实体数据大小超过限制,服务器可关闭链接以免客户端继续发送。临时状况可发送一个Retry-After头指定可重新尝试的时间。
    414, 因请求URI长度超出限制而拒绝。如POST变成GET而参数过长,重定向导致URI累加过长,安全漏洞攻击URI缓存溢出导致任意代码执行(无此漏洞的服务器返回414)
    415, 请求方法提供的资源其实体并非服务器所支持的格式。
    416, 请求头Range范围与实际不重合且无If-Range请求头。若Range是字节范围则表示超过资源长,服务器响应同时包含Content-Range实体头并被禁止multipart。
    417, 请求头Expect内容无法被服务器满足,或者服务是代理可证明下一个路由节点Expect无法被满足。
    421, 客户端IP到服务器连接数超过服务器允许范围。比如服务器看到的客户端地址是网关或代理服务器等,可能涉及不知一个终端用户。
    422, 请求格式正确,但是语义错误,无法响应(RFC4918 WebDAV)
    423,资源被锁定(RFC4918 WebDAV)
    424, 由于之前某个请求错误导致当前请求错误(如PROPPATCH)(RFC4918 WebDAV)
    425,在WebDav Advanced Collections 草案中定义,但是未出现在《WebDAV 顺序集协议》(RFC 3658)中。
    426,客户端应当切换到TLS/1.0。(RFC 2817)
    449,由微软扩展,代表请求应当在执行完适当的操作后进行重试。
    

    关于401的应用,来源:https://www.runoob.com/http/http-header-fields.html

    响应头中的WWW-Authenticate,客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。
    注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。
    

    5**状态服务端错误

    500,服务器未知状况导致它无法处理(比如服务器代码问题)。
    501,服务器不支持请求所需功能。无法识别请求方法,且无法支持其任何资源请求。
    502,做为网关或代理收到上游无效响应。
    503,临时服务器维护或过载,过段时间会恢复。响应中会有Retry-After表明预计的延迟,如果没有当作500处理。(其实不一定过载可能是服务器不希望拒绝客户端)
    504,做为网关或代理,并未及时从上游(URI标识的,如HTTP,FTP,LDAP)或辅助服务器(如DNS)收到响应。某些服务器会在DNS查询超时返回(400或500)
    505,服务不支持或拒绝支持请求中使用的Http版本。响应应包含为何不支持该版本以及服务器支持哪些协议的实体。
    506,《透明内容协商协议》(RFC 2295)扩展,服务器内部配置错误:被请求协商变元资源被配置为在透明内容协商中用自己,因此在一协商处理中不是一合适的重点。
    507,服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。WebDAV (RFC 4918)
    509,服务器达到带宽限制。这不是一个官方的状态码,但是仍被广泛使用。
    510,获取资源所需要的策略并没有没满足。(RFC 2774)
    

    参考

    • HTTP状态码: 菜鸟教程中的解释,通俗易懂,包括常用的、整体的(大类)、细节的(细节类别)状态码含义情况。细节的并不是很完整。
    • httpstatus.cn: 一个表格,便于查阅,信息解释比较详细,每个状态码都有额外链接。
    • HTTP状态码(响应码): 便于查询的表格,有列出支持的http版本,表格版本相对旧一些。

    相关文章

      网友评论

          本文标题:关于HTTP状态码

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