上一节内容我们学习了请求报文 第 8 天:弄懂 HTTP 请求报文,这节内容我们一起学习响应报文。请求是 UA(User Agent)的事情,它的目的是告诉服务端,我要哪些资源,你给我以某种方式把资源返回。服务端在返回资源的时候,需要按照 HTTP 协议规定的方式返回。这就使得响应报文也有自己的独有的格式。一图胜前言:
响应报文由三部分组成:
1.状态行(status line):
语法:HTTP版本 空格 状态码 空格 原因短语
这里主要说一下状态码,下面这些状态码由HTTP协议提供,它告诉客户端服务端处理请求时的状态。总共有 5 大类状态码:
1xx: Informational - Request received, continuing process,表示服务端已经接收到请求正在处理中;
2xx: Success - The action was successfully received, understood, and accepted,表示服务端明白了客户端要干什么,也可以做出正确的响应;
3xx: Redirection - Further action must be taken in order to complete the request,重定向,我处理不了你的请求,我需要把它交给其它小伙伴处理;
4xx: Client Error - The request contains bad syntax or cannot be fulfilled,客户端错误,服务端理解不了请求对象,要么是地址写错了,要么是不符合规则;
5xx: Server Error - The server failed to fulfill an apparently valid request,服务端错误,这个时候你可以找服务端小伙伴说:“你的服务挂了”。
下面是所有的状态码汇总,来源于 RFC2616,这些状态码也没必要死记,只要记住每一大类的意思就行,比如出现了 4开头的错误,先找客户端是不是哪里写错了。5开头的,那就让服务端修改吧。:
"100" : Continue
"101" : Switching Protocols
"200" : OK
"201" : Created
"202" : Accepted
"203" : Non-Authoritative Information
"204" : No Content
"205" : Reset Content
"206" : Partial Content
"300": Multiple Choices
"301" : Moved Permanently
"302": Found
"303" : See Other
"304" : Not Modified
"305" : Use Proxy
"307" : Temporary Redirect
"400" : Bad Request
"401" : Unauthorized
"402" : Payment Required
"403" : Forbidden
"404": Not Found
"405" : Method Not Allowed
"406" : Not Acceptable
"407" : Proxy Authentication Required
"408" : Request Time-out
"409" : Conflict
"410" : Gone
"411" : Length Required
"412" : Precondition Failed
"413" : Request Entity Too Large
"414" : Request-URI Too Large
"415" : Unsupported Media Type
"416" : Requested range not satisfiable
"417" : Expectation Failed
"500" : Internal Server Error
"501" : Not Implemented
"502" : Bad Gateway
"503" : Service Unavailable
"504" : Gateway Time-out
"505" : HTTP Version not supported
2.响应头(response header):
这部分和请求头一样 第 8 天:弄懂 HTTP 请求报文,不过它使用的是响应头。CRLF 可以理解为换行。
Status-Line
*(( general-header
| response-header
| entity-header ) CRLF)
CRLF
[ message-body ]
响应头:
Accept-Ranges
Age
ETag
Location
Proxy-Authenticate
Retry-After
Server
Vary
WWW-Authenticate
3.响应体(body):
这部分内容客户端是比较关心的,它主要通过这些数据来做一些业务处理。
总结
响应报文和请求报文类似,它主要的作用是把客户端需要的资源返给客户端,如果有错误,需要给客户端一个合理的状态码。关于具体某个字段是什么意思,等用到的时候查询资料即可,没必要浪费太多的时间在这里。这些内容比较基础,但是对我们要实现一个 HTTP server 有非常大的帮助。大家加油!
今天打卡指令:
1. 实现一个 HTTP server 的思路是什么,需要做哪些事情?
2.直接打卡。
推荐阅读: