一我的必须知道该说什么,一我的必须知道何时说,一我的必须知道对谁说,一我的必须知道怎么说。——现代管理之父德鲁克html
"/hello"接口的响应内容以下:web
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Tue, 15 Jan 2019 02:56:59 GMT
Content-Length: 12
hello, world 复制代码
其中,第1行是状态行,第2-4行都是响应头,第5行是一个空行,第6行是响应的消息体。数据库
一个http响应包括三个部分:后端
HTTP/1.1 200 OK
复制代码
包括三个部分:服务器
上面的状态行行,简单理解就是:采用http 1.1协议,向GET /hello请求进行响应,响应状态为成功。前后端分离
这里,咱们要重点了解下状态码。编码
客户端处理响应的结果优先根据状态码,其次根据响应头部来进行的。状态吗主要分红5个部分:url
状态码包括标准定义的官方状态码,还有非官方的状态码。非官方的状态码主要是由第三方软件系统本身定义的。好比Nginx服务器定义的494,表示客户端请求头数据太多。spa
状态码 | 描述 | 备注 |
---|---|---|
200 | ok | 最多见的状态码,表示服务端处理请求成功 |
201 | Created | 请求处理成功,同时新建了一个新的资源 |
204 | No Content | 请求处理成功,可是不返回任何主体数据(body) |
205 | Reset Content | 与204相似,可是要求客户端重置表单数据 |
状态码 | 描述 | 备注 |
---|---|---|
301 | Moved Permanently | 请求永久重定向到给定的url |
304 | Not Modified | 根据请求头If-Modified-Since或If-None-Match判断, 资源未发生改变,客户端可使用以前请求的资源副本。 |
状态码 | 描述 | 备注 |
---|---|---|
400 | Bad Request | 客户端请求错误,例如:请求参数不对,数据太大,参数格式错误等 |
401 | Unauthorized | 相似403,未经过验证,或者是未提供必须的用户信息,好比用户名和密码等 |
403 | Forbidden | 服务端拒绝请求,好比用户没有方法该资源的权限 |
404 | Not Found | 访问的资源不存在 |
405 | Method Not Allowed | 请求方法不支持。好比,客户端对某个url发起了一个GET请求, 而服务端对于该url必须使用POST请求。 |
429 | Too Many Requests | 请求数量超过了服务端的限制 |
状态码 | 描述 | 备注 |
---|---|---|
500 | Internal Server Error | 服务端内部错误 |
502 | Bad Gateway | 服务端器做为网关时或代理时,从上游收到了不正确的响应 |
503 | Service Unavailable | 服务暂时不可用。这是一个临时状态。 |
504 | Gateway Timeout | 服务端器做为网关时或代理时,从必定的时间内未收到上游的响应 |
响应头位于状态行以后,与请求头同样,使用key-value的格式,并以CRLF结尾。也就是说每行都是一个键值对。响应头能够包括多个键值对。最后使用一个空行,来代表整个响应头的结束。代理
标准响应头字段有76个,非标准的有十多个。做为后端开发人员,须要了解一些常见的响应头。咱们首先介绍下'hello,world'中的响应头,后续出现其它的响应头字段时再一一说明。
Content-Type: text/plain; charset=utf-8
Date: Tue, 15 Jan 2019 02:56:59 GMT
Content-Length: 12
复制代码
字段 | 描述 | 例子 | 备注 |
---|---|---|---|
Content-Type | 媒体类型(MIME type) | Content-Type: text/plain; charset=utf-8 表示响应的消息体内容格式是纯文本,采用utf-8编码 |
|
Date | 响应时间 | Date: Tue, 15 Jan 2019 02:56:59 GMT | |
Content-Length | 消息体(body)内容的长度,以字节为单位 | Content-Length: 12 好比:hello, world正是12个字节长度 |
hello, world
复制代码
该消息体返回了文本"hello, world",其长度为12个字节。
在正式的项目中,就是返回该接口对应的数据。一般这些数据都是来自于数据库或其它存储中,根据业务需求,处理后返回给客户端。实际上,做为web后端开发人员,熟悉了解业务需求,能够有助于提升项目质量和下降项目周期风险。在做者带团队时,宁愿多花点时间和成员沟通业务需求和相关流程,在此基础上,后续的开发会变得顺畅多了。
本节主要介绍了http响应的主要内容,介绍了响应格式,常见的状态码等。下节将介绍先后端分离的开发模式和实践中常常会出现的问题,以及如何处理这些问题的经验和方法。