第二章 协议返回状态码
作者:肖鹏 时间:2018-04-06
2.1 报文信息
2.1.1 报文
HTTP报文本身是由多行数据构成的字符串文本HTTP报文大致可分为报文首部和报文主体两块,最初是由空行来划分,通常,不一定需要报文主体
2.1.2 请求报文及响应报文结构
请求报文结构:
- 报文首部
- 请求行:包含用户请求的方法,请求URI和HTTP版本
- 请求首部字段
- 通用首部字段
- 实体首部字段
- 其他
- 空行(CR + LF)
报文主体
响应报文结构:报文首部
- 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
- 响应首部字段
- 通用首部字段:
- 实体首部字段
- 其他
- 空行(CR + LF)
- 报文主体
首部字段:包含请求和响应的各种条件和属性的各类首部,一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部
2.1.3 报文和实体差异
报文(message):是HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP通信传输。
实体(entity):作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
HTTP报文的主体用于传输请求或响应的实体主体。通常,报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。 后面会多次出现,所以我们在这里提前了解两者差异
2.2 请求行信息
GET /index.html HTTP/1.1
请求方法:
方法 | 详细 |
---|---|
GET | 请求获取服务器资源,返回报文主体 |
HEAD | 用于确认URI的有效性及资源更新的日期时间等,和GET一样,只不过不返回主体 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。要求使用隧道协议连接代理 |
OPTIONS | 允许客户端查看服务器的性能,询问支持的方法 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。追踪路劲 |
一般 DELETE,PUT直接被禁用,毕竟在HTTP/1.1中没有验证机制,所以为了服务器的安全,一般会禁止使用这两种方法
2.3 响应状态码
HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。当然可以自定义状态码
类别 | 信息 | 原因短语 |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作已完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务端错误状态码) | 服务器处理请求出错 |
2.3.1 1XX 继续
状态码 | 信息 | 表示 |
---|---|---|
100 | Continue | 客户端应当继续发送请求 |
101 | Switching Protocols | 服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求 |
102 | Processing | 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行 |
2.3.2 2XX 成功
状态码 | 信息 | 表示 |
---|---|---|
200 | OK | 从客户端发来的请求在服务端正常处理 |
204 | No Content | 服务端接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分,另外也不允许返回任何实体的主体 |
206 | Partial Content | 客户端进行了范围请求, 而服务器成功执行了这部分请求,响应报文中包含由Content—Range 指定的范围的实体内容 |
2.3.3 3XX 重定向
状态码 | 信息 | 表示 |
---|---|---|
301 | Moved Permanently | 永久性重定向 |
302 | Found | 临时性重定向 |
303 | See Other | 由于对应的资源存在着另一个uri,应使用GET方法定向获取请求的资源 |
304 | Not Modified | 客户端发送附带条件的请求,也就是资源找到了,但是没有符合条件请求 |
307 | Tempoeary Redirect | 临时重定向,和302很相似,但是会根据游览器不同导致出现不同问题 |
注意:当301、302、303响应状态码返回时,几乎所有的游览器都会把POST改为GET,并删除请求报文内的主体,之后请求会自动再次发送301、302标准是禁止将POST改为GET方法,但实际使用时都会改变
304的请求附加条件是指采用GET方法的请求报文中包含If-Match、If-Modified-Since、IF-None-Match、IF-Range、If-Unmodified-Since中的任一首部
2.3.4 4xx 客户端错误
4XX 的响应结果表明客户端是发生错误的原因所在
状态码 | 信息 | 表示 |
---|---|---|
400 | Bad Request | 请求报文中存在语法错误:游览器会像200 OK 一样对待改状态码 |
401 | Unauthorized | 发送的请求需要通过http认证(BASIC认证、DIGEST认证)的认证信息,如果前面已经请求过一次,证明认证失败 |
403 | Forbidden | 请求资源的访问被服务器拒绝 |
404 | Not Found | 服务器无法找到请求的资源 |
2.3.5 5xx 服务器错误
状态码 | 信息 | 表示 |
---|---|---|
500 | Internal Server Error | 服务器端知悉请求时发生错误 |
503 | Service Unavailable | 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求 |
Ps:作为前端进行ajax请求时,出现5xx错误,那最大的可能是服务端出现问题。
2.3.6 状态码总结
- HTTP状态码不可能就这么一点,所以这里我只写了常用状态码,当然标准状态码目前是截止与600,我们也可以自定义状态码- 状态码返回信息字段可以修改,有时会出现服务器出现问题,但是依然返回200的情况,所以实际运用中需要根据实际情况来确定
2.4 总结
本章我们简单的总结了下协议响应和请求的结构,以及状态码,下章我们将从首部字段一个一个分析使用
作者:肖鹏 时间:2018-04-06