《图解HTTP 2024-Y02》Chapter4 返回结果的状态码

131 阅读5分钟

目前市场上得书籍很少能将http相关知识讲的很清楚,很多开发在这一块的体系知识需要得到补充,当然也包括我。无意间,看到一本 日本人写的 《图解http》书,发现里面讲的很细致,并且以图形得方式深度还原http之间的联系,值得推荐,于是好记性不如烂笔头,开始记录吧,本文主要是针对第四章记录,共11章,每个章节都会做详细的讲解

image.png

状态码告知从服务器端返回的请求结果

状态码类别原因短句
1xx信息性状态码接受的请求正在处理
2xx成功状态码请求正常的状态码
3xx重定向状态码需要进行附加操作才完成操作
4xx客户端错误状态码服务器无法处理请求
5xx服务器状态码服务器处理请求错误

记录在RFC2016上的http状态码就有40多种,再加上webdev万维网的 就达到60多种,但是我们经常用到的基本只有14种,以下对14种进行一个讲解

2xx成功

  1. 200 OK

    表示客户端发送的请求被服务端正常处理了。在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变,比如get方法时,对应请求资源的实体回作为响应返回,使用head方法时,对应请求资源的实体主体不随着报文首部作为响应返回

  2. 204 not content

    代表服务器接受请求已成功处理,但在返回响应报文不含实体的主体部分,也不允许返回任何实体的主体,比如,从浏览器发送请求处理后,返回的是204状态码,说明当前页面没有任何的更新和变动,一般是客户端测试服务端能否正常连接服务器的状态下使用

  3. 206 partial content

    该状态表示客户端只进行了小范围的请求,而服务器服务器成功的执行了这部分的get请求,如何区分是请求的那一部分呢,参考响应报文的 content-range指定的范围

3xx 重定向

响应结果表明浏览器需要执行某些特殊的处理才能正常请求

  1. 301 moved peemanently

    永久性重定向,表示请求的资源已经分配给新得url了,应该使用现在所指的URI 比如我请求一个接口:www.baidu.com/api/index 这样不行,需要加上 www.baidu.com/api/index/ 这样就可以了,这种情况可能就是后端在部署的时候更改了路径的问题所致

  2. 302 found

    临时性重定向,该状态码表示请求资源分配到了新的URI,请用户本次使用新的URI访问,它和301的区别是,这是临时性的,后面还能访问,而301是不用新的书签会一直无法访问

  3. 303 see other

    表示请求对应的资源存在另一个URI,应使用GET方法获取请求的资源,和302状态码有相同的功能,但是还是有点区别,303更理想,因为这里是涉及到版本的问题。

当301/302/303 响应状态码返回时,几乎所有浏览器都会把post改成get,并删除报文内的主体,之后请求会自动再次发送, 301、302是禁止将post方法改变成get方法的,但是实际大家开发的时候都没有管这方面

  1. 304 not modified

表示客户端发送附带条件,服务端允许请求访问资源,但是允许的访问的地方没有满足客户端的搜索条件,所以直接返回304,虽然304被划分在3xx重定向系统中,但是和重定向是没有关系的。304返回不包含任何响应的主体部分

  1. 307 temporary redirect

临时重定向,和302有相同的含义,虽然302禁止post变成get,但是大家开发都不会管这些。所以返回307,说明客户端换不换都无所谓了,直接忽略。。。

4xx 表示响应结果是客户端发生错误的原因

  1. 400 bad request

    表示请求报文中存在语法错误,可能是某个字段的原因导致,需要重新修改报文后再次请求,才能成功

  2. 401 unauthorized

    表示发送的请求需要经过http认证(basic认证、digest认证)信息,如果之前已经请求了一次,就表示用户认证失败,返回401的响应信息必须包含一个适用于请求资源的www-authenticate 首部用于质询用户信息,当浏览器初次接收端熬401,会弹出认证用的对话窗口,这个用在登录验证还是比较合适的

  3. 403 forbidden

    表示对请求资源的访问被服务器拒绝了,服务端没必要给拒绝的详细理由,有点拽哦,但是想做说明给客户端多话,可以在响应的实体部分对原因做出描述,场景比如:没有获得权限就访问某个页面等等

4.404 not found

表示用户输入了错误的信息,服务器找不到对应的资源,返回404,也能用于服务器直接拒绝你,还不给理由那种

5xx 服务器本身错误

  1. 500 internal server error

    表明服务器端在执行请求时发生了错误,可能是web应用存在的bug或某些临时故障

  2. 503 server unavailable

    表示服务器暂时处于超负载或停机维护中,无法处理请求,如果服务端预先知道,最好是在响应头写 retry-after首部字段返回给客户端做页面上的交互处理