一个人必须知道该说什么,一个人必须知道什么时候说,一个人必须知道对谁说,一个人必须知道怎么说。——现代管理之父德鲁克1. http 响应"/hello"接口的响应内容如下:HTTP/1.1 200 OKContent-Type: text/plain; charset=utf-8Date: Tue, 15 Jan 2019 02:56:59 GMTContent-Length: 12hello, world其中,第1行是状态行,第2-4行都是响应头,第5行是一个空行,第6行是响应的消息体。一个http响应包括三个部分:状态行响应头消息体(body)[可选]1.1 状态行HTTP/1.1 200 OK包括三个部分:http版本,这里是1.1状态码,这里是200,代表成功状态码简短描述,这里是ok上面的状态行行,简单理解就是:采用http 1.1协议,向GET /hello请求进行响应,响应状态为成功。这里,我们要重点了解下状态码。1.1.1 状态码客户端处理响应的结果优先根据状态码,其次根据响应头部来进行的。状态吗主要分成5个部分:1xx (Informational response),以1开头的状态码,表明服务端已收到请求,告诉客户端等待请求的结果。2xx (Success),以2开头的状态码,表明服务端已收到并接收了请求。例如常见的200,代表请求被成功处理。3xx (Redirection),以3开头的状态码,表明服务端需要进行额外的处理来完成该请求。很多3xx的状态码被用在url重定向中。4xx (Client errors),以4开头的状态码,表明客户端引起的错误。例如常见的404,表示客户端访问了一个不存在的资源。5xx (Server errors),以5开头的状态码,表明服务端处理请求时发生了错误。例如常见的500错误,表示服务端处理请求时发生了内部错误。状态码包括标准定义的官方状态码,还有非官方的状态码。非官方的状态码主要是由第三方软件系统自己定义的。比如Nginx服务器定义的494,表示客户端请求头数据太多。1.1.1.1 常见的2xx标准状态码状态码描述备注200ok最常见的状态码,表示服务端处理请求成功201Created请求处理成功,同时新建了一个新的资源204No Content请求处理成功,但是不返回任何主体数据(body)205Reset Content与204类似,但是要求客户端重置表单数据1.1.1.2 常见的3xx标准状态码状态码描述备注301Moved Permanently请求永久重定向到给定的url304Not Modified根据请求头If-Modified-Since或If-None-Match判断,资源未发生改变,客户端可以使用之前请求的资源副本。1.1.1.3 常见的4xx标准状态码状态码描述备注400Bad Request客户端请求错误,例如:请求参数不对,数据太大,参数格式错误等401Unauthorized类似403,未通过验证,或者是未提供必须的用户信息,比如用户名和密码等403Forbidden服务端拒绝请求,比如用户没有方法该资源的权限404Not Found访问的资源不存在405Method Not Allowed请求方法不支持。比如,客户端对某个url发起了一个GET请求,而服务端对于该url必须使用POST请求。429Too Many Requests请求数量超过了服务端的限制1.1.1.4 常见的5xx标准状态码状态码描述备注500Internal Server Error服务端内部错误502Bad Gateway服务端器作为网关时或代理时,从上游收到了不正确的响应503Service Unavailable服务暂时不可用。这是一个临时状态。504Gateway Timeout服务端器作为网关时或代理时,从一定的时间内未收到上游的响应1.2 响应头响应头位于状态行之后,与请求头一样,使用key-value的格式,并以CRLF结尾。也就是说每行都是一个键值对。响应头可以包括多个键值对。最后使用一个空行,来表明整个响应头的结束。标准响应头字段有76个,非标准的有十多个。作为后端开发人员,需要了解一些常见的响应头。我们首先介绍下’hello,world’中的响应头,后续出现其它的响应头字段时再一一说明。1.2.1 hello, world 响应头Content-Type: text/plain; charset=utf-8Date: Tue, 15 Jan 2019 02:56:59 GMTContent-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个字节长度 1.3 消息体-body部分hello, world该消息体返回了文本"hello, world",其长度为12个字节。在正式的项目中,就是返回该接口对应的数据。通常这些数据都是来自于数据库或其它存储中,根据业务需求,处理后返回给客户端。实际上,作为web后端开发人员,熟悉了解业务需求,可以有助于提高项目质量和降低项目周期风险。在作者带团队时,宁愿多花点时间和成员沟通业务需求和相关流程,在此基础上,后续的开发会变得顺畅多了。2. 小结本节主要介绍了http响应的主要内容,介绍了响应格式,常见的状态码等。下节将介绍前后端分离的开发模式和实践中经常会出现的问题,以及如何处理这些问题的经验和方法。本文为作者原创作品,属于《重新学习web后端开发》专辑中的一篇,转载时请备注作者信息及来源。本文原文地址:https://www.donnyzhang.com/20…