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

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

总述

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

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

常见的大概一共有14种

2XX

200 OK

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

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

200

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次请求,则表示用户认证失败

401

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是什么意思