一. HTTP请求
HTTP请求是由客户端发出的消息,用来使服务器执行动作.发出的消息包括起始行,Headers,Body.
起始行
起始行包含三个元素:
- HTTP方法
一个动词(像GET,PUT或者POST)或者一个名词(想HEAD或者OPTIONS),用来描述要执行的动作.例如,GET表示要获取资源,POST表示向服务器推送数据等. - 请求目标
- 请求目标,通常是一个URL,或者是协议,端口和域名的绝对路径.
- 请求的各式会根据不同的HTTP方法而异,可以是:
- 一个绝对路径,末尾跟上一个'?'和查询字符串,这种形式成为原始形式,通常被GET,POST,HEAD和OPTIONS方法所使用.
POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
* 一个完整的URL,被称为绝对形式,主要在GET连接到代理时使用.
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
* 由域名和可选端口(以':'为前缀)组成的URL的authority component,称为authority form,仅在使用CONNECT简历HTTP隧道时才使用.
CONNECT developer.mozilla.org:80 HTTP/1.1
* 星号形式(asterisk form),一个简单的星号("*").配合OPTIONS方法使用,代表整个服务器.
OPTIONS * HTTP/1.1
- HTTP版本(HTTP version),定义了剩余报文的结构
Headers
请求的HTTP headers遵循和HTTP header相同的基本结构:不区分大小写的字符串,紧跟着的冒号(':')和一个结构取决于header的值.整个header(包括值)由一行组成.
- 请求头可以分为很多组:
- General headers:例如Via,适用于整个报文.
- Request headers:例如User-Agent,Accept-Type等
- Entity headers:例如Content-Length,适用于请求的body.
Body
请求的最后一部分是它的body,不是所有的请求都有一个body,如GET,HEAD,DELETE和OPTIONS等获取资源的请求,通常不需要body.有些类似于POST请求将数据发送到服务器以更新数据的请求,就会需要body.
- Body可以分为两类:
- Single-resource bodies:由一个单文件组成.该类型body由两个header定义:Content-Type和Content-Length.
- Multiple-resource bodyies:由多部分组成,每一部分包含不同的信息位.
二. HTTP响应
状态行
HTTP响应的起始行被称作状态行,包含以下信息:
- 协议版本:通常为HTTP/1.1
- 状态码(status code):表明请求是成功或失败.常见的成功码有200,201,300等,失败码有400,401,500等.
- 状态文本(status text):一个简短的,纯粹的信息,通过状态码的文本描述,帮助人们解读HTTP消息.
典型的状态码:HTTP/1.1 404 Not Found。
Headers
响应的HTTP headers和其他header相同的结构:不区分大小写的字符串,紧跟着的冒号(':')和一个结构取决于header类型的值.
- 响应头可以分为几组:
- General headers:例如Via,适用于整个报文.
- Request headers:例如Vary和Accept-Ranges,提供其他不符合状态行的关于服务器的信息.
- Entity headers:例如Content-Length,适用于请求的body.如果请求中没有任何的body,则不会发送这类的头文件
Body
响应最后一部分是body,不是所有的响应都有body,具有状态码(如201或204)的响应,通常不会有body.
- Body可分为三类:
- Single-resource bodies:由已知长度的单个文件组成.该类型body由两个header定义:Content-Type和Content-Length.
- Single-resourcebodies:由未知长度的单个文件组成,通过将Transfer-Encoding设置为chunked来使用chunks编码.
- Multiple-resource bodies:由多部分body组成,每部分包含不同的信息段.