HTTP报文引发地思考:
- 报文是如何流动的;
- HTTP报文的三个组成部分;(起始行、首部、实体的主体部分)
- 请求和响应报文的区别;
- 请求报文支持的各种方法;
- 和响应报文一起返回的状态码;
- 各种各样的HTTP首部都是用来做什么的;
报文
- 报文流是HTTP应用程序之间发送的数据块。这些数据块是以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分;
- 报文流向是报文流动的方向。不管是请求报文或响应报文,报文都会从上游服务器向下游服务器流动,即数据从源端服务器向目标服务器发送;
报文组成
简述:
客户端请求和服务器响应都会生成一条报文。报文是由用于对报文进行描述的起始行,包含属性的首部及可选的实体数据等模块构成;
语法(组成格式):
请求报文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
响应报文的格式(注意,只有起始行的语法有所不同):
<version> <status> <reason-phrase>
<headers>
<entity-body>
请求报文
- 方法<method>:请求报文时方法用于告知服务器执行的操作,让服务器根据客户端请求报文做出对应的处理,即服务器对资源执行的动作;
- 请求资源<request-URL>:请求URL,即请求资源路径,用于告诉服务器对哪个资源路径执行相应的请求动作;
- 版本<version>:当前请求客户端所使用的HTTP版本,使服务器知道当前版本所能支持执行的方法特性;
- 首部<headers>:首部中包含了请求中所添加的属性,例如接收文本类型,发起请求名称等;
- 请求体<entity-body>:请求服务器时传输的数据实体,请求体是可选传参的,可以不传,也可以传字典或字符串等数据;
响应报文
- 版本<version>:当前响应服务器所使用的HTTP版本,用于通知客户端当前服务器HTTP版本;
- 状态码<status>:通过三位数字来通知请求过程中发生的情况,一般第一位数字用来判断当前响应结果;
- 原因短语<reason-phrase>:数字状态码的可读版本,状态码所对应的原因描述;
- 首部<headers>:响应报文有自己的首部集,以便为客户端提供信息;
- 响应实体<entity-body>:根据用户请求所返回的响应数据;
起始行
- 请求行:请求报文请求服务器对资源执行一些操作,请求报文的起始行我们称为请求行。请求行包含一个方法,请求资源路径URL和HTTP版本,方法描述了服务器执行资源的操作,请求资源URL是对某个资源路径执行这个操作方法,HTTP版本则是客户端所使用的HTTP版本号;
- 响应行:响应行说明了服务器对请求报文执行后的响应。响应行包含了服务器HTTP版本,响应状态码及原因短语;
- 方法:
方法 | 功能 | 是否包含实体数据 |
---|---|---|
GET | 从服务器上获取资源文档 | 否 |
HEAD | 只获取服务器资源文档首部 | 否 |
POST | 向服务器发送需要处理的数据 | 是 |
PUT | 将请求的主体部分存放在服务器上 | 是 |
TRACE | 对经过的代理服务器传送服务器上的报文进行追踪 | 否 |
OPTIONS | 决定可以在服务器上执行哪些方法 | 否 |
DELETE | 从服务器上删除数据 | 否 |
- GET:用于请求服务器发送资源数据。
- HEAD:在不需要获取资源主体的情况下,获取服务器的响应首部,便于获取了解资源的类型(格式等)、验证资源是否存在或者被修改过;
- POST:客户端向服务器发送实体数据;
- PUT:将客户端数据上传到服务器,并存储在服务器中;
- DELETE:将用户指定服务器上的数据删除,但这里的删除可能会涉及到服务器上权限问题,有时候删除成功,并不代表服务器上资源已经不存在了;
- 常见状态码
整体范围 | 使用范围 | 分类 |
---|---|---|
100-199 | 100-101 | 信息提示 |
200-299 | 200-206 | 成功响应 |
300-399 | 300-305 | 资源重定向 |
400-499 | 400-415 | 客户端出错 |
500-599 | 500-505 | 服务器出错 |
- 101:客户端的请求初始化数据服务器收到并响应,客户端可继续发生数据;
- 200:请求成功响应,返回客户端请求的资源数据;
- 300:客户端请求的URL指向多个资源;
- 301:请求的URL资源不存在了;
- 400:客户端发送数据出错;
- 500:服务器处理请求报文失败;
首部
- 通用首部:在服务器、客户端及其他应用程序都可使用的通用首部,例如:Date:Tue,3 Oct 1993;
- 通用缓冲首部:HTTP应用程序对数据进行本地缓冲,这样就不需要每次都请求源服务器获取数据;
- 请求首部:请求报文中的请求首部,为请求的服务器提供了额外的信息,提供了客户端希望接收到的数据类型或编码字符格式等;
- 响应首部:响应报文也提供了相应的响应首部集,将响应首部信息更好地通知客户端,有助于客户端处理响应,便于客户端以后发送更好地请求;
- 实体首部:报文中用于应对实体主体的首部,主要用于对实体数据类型进行说明;
- 扩展首部:扩展首部是非标准的首部,由应用程序开发者创建,但还未添加到已批准的HTTP 规范中去。即使不知道这些扩展首部的含义,HTTP 程序也要接受它们并对其进行转发;
常见首部实例
首部实例 | 描述 |
---|---|
Date:Tue,3Oct 1997 02:16:03 GMT | 服务器产生响应的日期 |
Content-length:15040 | 实体的主体部分包含了15 040 字节的数据 |
Content-type:image/gif | 实体的主体部分是一个GIF 图片 |
Accept: image/gif, image/jpeg, text/html | 客户端可以接收GIF 图片和JPEG 图片以及HTML |
请求Accept首部
首部 | 描述 |
---|---|
Accept | 告诉服务器能够发送哪些媒体类型 |
Accept-Charset | 告诉服务器能够发送哪些字符集 |
Accept-Encoding | 告诉服务器能够发送哪些编码方式 |
Accept-Language | 告诉服务器能够发送哪些语言 |
TE11 | 告诉服务器可以使用哪些扩展传输编码 |
安全请求首部
首部 | 描述 |
---|---|
Authorization | 包含了客户端提供给服务器,以便对其自身进行认证的数据 |
Cookie | 客户端用它向服务器传送一个令牌——它并不是真正的安全首部,但确实隐含了安全功能14 |
Cookie2 | 用来说明请求端支持的cookie 版本,参见11.6.7 节 |
内容首部
首部 | 描述 |
---|---|
Content-Encoding | 对主体执行的任意编码方式 |
Content-Length | 主体的长度或尺寸 |
Content-Type | 这个主体的对象类型 |