您的位置:首页 > 理论基础 > 计算机网络

4.返回结果的HTTP状态码

2017-12-06 23:56 232 查看
HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务端的处理是否正常,通知出现的错误等工作.

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

状态码的职责是当客户端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误.

状态码类别 :
类别 原因短语
1XX informational(信息性状态码) 接收的请求正在处理
2XX success(成功状态码) 请求正常处理完毕
3XX redirection(重定向状态码) 需要进行附加操作以完成请求
4XX client error(客户端错误状态码) 服务器无法处理请求
5XX server error(服务器错误状态码) 服务器处理请求出错

只要遵守状态码类别的定义,即使改变RFC2616中定义的状态码,或服务器端自行创建状态码都没问题.

记录在RFC2616上的HTTP状态码就达40中,若再加上webdav 和附加HTTP状态码等扩展,数量就达60余种. 别看种类繁多,实际上经常使用的大概只有14种.

二 . 2XX 成功 : 2XX的响应结果表明请求被正常处理了

200 ok : 表示从客户端发来的请求在服务器端被正常处理了. 在响应报文内,随状态码一起返回的信息会因方法的不同而发生变化.比如,使用GET方法时,对应请求资源的实体会作为响应返回;而使用HEAD方法时,对应请求资源的实体首部不随报文主体作为响应返回(即在响应中只返回首部,不会返回实体的主体部分).

204 No content : 该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分.另外,也不允许返回任何实体的主体. 比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新. 一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新消息内容

206 partial content : 该状态码表示客户端进行了范围请求,而服务器陈宫执行了这部分的GET请求. 响应报文中包含由content-range 指定范围的实体内容.

三. 3XX重定向 : 3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求.

301 moved permanently: 永久重定向.该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI.也就是说,如果已经把资源对应的URI保存为书签了,这时应该按location首部字段提示的URI重新保存.

http://example.com/sample : 最后的斜杠如果遗漏,就会产生301状态码.

302 found : 临时性重定向.该状态码表示请求的资源已经被分配了新的URI,希望用户能使用新的URI访问. 和 301 moved permanently 状态码相似,但302状态码代表的资源不是被永久移动,只是临时性质的.换句话说,已移动的资源对应的URI将来还有可能发生改变.比如,用户把URI保存成书签,但不会像301状态码出现时那样去更新书签, 而是仍旧保留返回302状态码的页面对应的URI.

303 see other : 该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法向获取请求的资源. 303状态码和303 found 状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别 . 比如,当使用post方法访问CGI程序,其执行后的处理结果是希望客户端能以GET方法重定向到另一个URI上去时,返回303状态码.虽然302 found装固态吗也可以实现相同的功能,但这里使用303状态码是最理想的.

304 Not modified : 该状态码表示客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况 . 304状态码返回时,不包含任何响应的主体部分.304虽然被划分在3XX类别中,但是和重定向没有关系. 附带条件的请求是指采用GET方法的请求报文中包含 if-match ,if-modified-since ,if-none-match,if-range,if-unmodified-since 中任一首部 .

307 Temporary redirect : 临时重定向. 该状态吗与302 found 有着相同的含义.尽管302 标准禁止post变换成GET ,但实际使用时大家并不遵守 . 307 或遵照浏览器标准,不会从POST变成GET .但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况.

四. 4XX 客户端错误 : 4XX的响应结果表明客户端是发生错误的原因所在.

400 bad request : 该状态码表示请求报文中存在语法错误. 当错误发生时,需修改请求的内容后再次发送请求. 另外,浏览器会像200 OK 一样对待该状态码 .

401 Unauthorized : 该状态码表示发送的请求需要有通过HTTP认证(basic认证,digest认证)的认证信息.另外若之前已进行过1次请求,则表示用户认证失败 .返回含有401 的响应必须包含一个适用于被请求资源的www-authenticate首部用以质询(challenge) 用户信息.当浏览器初次接收到401 响应, 会弹出认真可用的对话窗口 .

403 forbidden : 该状态码表明对请求资源的访问被服务器拒绝了 .服务端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了 .

五. 5XX服务器错误 : 5XX的响应结果表明服务器本身发生错误.

500 internal server error : 该状态码表明服务端在执行请求时发生了错误. 也有可能是web应用存在的bug或某些临时的故障.

503 service unavailable : 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求.如果事先得知解除以上状况需要的时间,最好写入retryafter 首部字段再返回给客户端.

状态码和状况的不一致 : 不少返回的状态响应都是错误的,但是用户可能察觉不到这点.比如web应用程序内部发生错误,状态码依然返回 200 OK ,这种情况也经常遇到.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HTTP