似乎没好好研究过HTTP状态码

本文详细介绍了HTTP状态码的分类及常见的14种状态码,包括200 OK、301 Moved Permanently、404 Not Found等,并解释了它们在实际场景中的应用。

title: 似乎没好好研究过HTTP状态码 date: 2017-10-29 21:48:11 tags: [HTTP,网络协议]

这几天小组值班的时候总是听学长提起面试,也顺便搜了下一些传说中的面经.... 发现差距还是挺大的,甚至这个状态码的问题也没好好总结过 为了证明自己做过程序员.............就重新记录下

绝大部分为《图解HTTP》笔记

总述

HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端 的处理是否正常、通知出现的错误等工作 状态码由3位数字组成,第一位是原因分类代表,剩下的两位没有特殊分类

类型类别原因
1XXInformational(信息性状态码)接受的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XX5XX Server Error(服务器错误状态码)服务器处理请求错误

常见的大概一共有14种

2XX

200 OK

这个状态码应该是最常见也是我们最想见到的,代表客户端发送的请求被服务端正常处理 同时在响应报文内,随状态码返回的信息会随着HTTP方法不同而不同

常见的请求方法是GET和POST,但不仅仅这两种,通常有以下8种方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT

204 No Content

这个状态码代表的意思就是客户端发送的请求被服务端正常处理了 但是服务端并没有返回任何实体内容

一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新 信息内容的情况下使用

206 Partial Content

该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求 对于206的定义是请求必须包含Range头来标示我们想要的范围

因此这就是说我们可以通过Range和206 Partial Content来分块获取一个大文件

3XX

301 Moved Permanently

永久性重定向

该状态码表示请求的url资源被分配了新的url 如果已经把资源对应的URI保存为书签了 但是此时新的URL在Location头中给出,浏览器应该自动地保存和访问新的URL

302 Found

临时性重定向

从总的描述中我们可以看出这个状态码和301相似 只是该状态码属于临时性分配新的url 在本次的访问中应使用新得url,同时不用更新书签

303 See Other

这个状态码也代表访问存在新的url,但应注意的是这个 状态码明确表示客户端应该采用GET方法获取资源

比如当使用POST方法访问CGI程序其执行后的处理结果是希望客户端能以GET方法重定向 到另一个URI上去时,返回303状态码。虽然302 Found状态码也可以实现相同的功能,但 这里使用303状态码是最理想的

304 Not Modified

该状态码表示客户端发送附带条件的请求时,304状态码返回时,不包含任何响应的主体部分 服务器告诉客户,原来缓冲的文档还可以继续使用 304虽然被划分在3XX类别中,但是和重定向没有关系

比如在包含If-Modified的网页中,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新 而动态页面则是在消息头中定义Last Modified,最后形成这样的结果

第一次访问 200 鼠标点击二次访问 (Cache) 按F5刷新 304 按Ctrl+F5强制刷新 200

附带条件的请求是指采用 GET 方法的请求报文中包含 If-Match,If-ModifiedSince,If-None-Match,If-Range,If-Unmodified-Since 中任一首部

307 Temporary Redirect

临时重定向

这个状态码和302含义一样,不过上面没有说到

当 301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成 GET,并删除请求报文内的主体,之后请求会自动再次发送 301、302标准是禁止将POST方法改变成GET方法的,但实际使用时大家都还是会那么做

而这个307比较听话,会遵照浏览器标准,不会从POST变成GET

4XX

400 Bad Request

该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求

401 Unauthorized

该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST 认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败

403 Forbidden

这个状态码也是比较常见的,表示尝试请求访问的资源被禁止访问 未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP 地址试图访问)等列举的情况都可能是发生403的原因

404 Found

又一个常见的状态码,表示服务器没有此资源 也可能是服务器无情的拒绝了你,但不想告诉你为什么

这个在python的开发中我主要见到的主要是路由未定义而导致的404

5XX

500 Internal Server Error

该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障

这个正如官方解释,在开发中将常遇到的问题就是代码错误,至少我碰到的是这样

503 Service Unavailable

这个状态码代表的是服务器超过负载或者停机维护,无法处理请求

关于状态码和响应

不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。比如 Web 应用程序内部发生错误,状态码依然返回200 OK,这种情况也经常遇到

参考:状态码维基百科 304 Not Modified状态码 304是什么意思

转载于:https://juejin.im/post/5b2c85086fb9a00e6b3c9b61

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值