1. 报文流:
HTTP报文就是在HTTP应用程序之间发送的数据块,这些数据块采用文本形式,以“元信息(meta-information)” 开头,元信息用于描述报文的内容及含义。
将HTTP报文比喻成像河水一样流动,报文只能流向下游,不能流向上游。
术语 “流入(inbound)”、“流出(outbound)”、“上游(upstream)”、“下游(downstream)” 用来描述报文的传输方向。
2. 常用的HTTP方法:
GET:
从服务器获取一份文档;
HEAD:
只从服务器获取文档的首部,不会返回实体的主体部分。
这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查,
例如 查看资源是否存在、判断其类型、测试资源是否被修改了 等等;
POST:
向服务器发送需要处理的数据。
通常用来支持HTML表单,表单中填好的数据通常会被送到服务器;
PUT:
将请求的主体部分存储在服务器上;
TRACE:
对可能经过 代理服务器 传递到服务器上去的报文进行追踪。
此方法主要用于调试诊断,用于验证客户端发送的原始请求是否如愿穿过了请求/响应链。
详细过程:
客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序,每个中间节点都可能会修改原始的HTTP请求。
TRACE请求 会在目的服务器端发起一个“环回”动作,行程最后一站的服务器会返回一条 TRACE响应,并在响应体中携带它收到的原始请求报文。
这样客户端就可以检查HTTP请求是否在中间程序上被修改过、以及是如何被修改的。
TRACE报文体:
TRACE请求 中不能带有实体部分的请求体;
TRACE响应 中的实体部分主要是用于携带服务器收到的请求的精确副本;
OPTIONS:
决定可以在服务器上执行哪些方法,用于客户端向服务器询问其支持的方法;
DELETE:
从服务器上删除一份文档。
3. 安全方法:
HTTP定义了一组被称为 “安全方法” 的方法,GET和HEAD方法都被认为是安全的,使用GET和HEAD方法的HTTP请求都不会产生什么动作。
但安全方法并不一定是什么动作都不执行的(实际上这是由Web开发者决定的)。
使用安全方法的目的:是为了当使用 可能引发某一动作的不安全方法时,允许HTTP应用程序开发者通知用户。
例如,当使用支付宝付款时,会弹出提示你正在进行支付操作,这就是因为使用了POST或者PUT方法,在修改服务器上的数据内容。
4. 状态码分类:
整体范围 | 已定义范围 | 分类 |
---|---|---|
100~199 | 100~101 | 信息提示(信息性状态码) |
200~299 | 200~206 | 成功 |
300~399 | 300~305 | 重定向 |
400~499 | 400~415 | 客户端错误 |
500~599 | 500~505 | 服务器错误 |
100:
状态码 | 原因短语 | 含义 |
---|---|---|
100 | Continue | 说明服务器收到了请求的初始部分,回复100给客户端,要求客户端继续传输 |
101 | Switching Protocols | 服务器回复客户端101,说明服务器正在根据 UPDATE 首部中指示的协议版本进行切换 |
5. 首部字段:
HTTP请求和响应报文头中的第一行叫 请求行/响应行,
除去第一行之外,请求头/响应头 中的其余部分叫 首部字段
。
每个HTTP首部都有一种简单的语法:
首部名称 + 冒号: + (可选空格) + 字段值 + CRLF
例如:
Connection: keep-alive
HTTP首部分为以下几类:
(1)通用首部:
既可以出现在 请求 报文头中,也可以出现在 响应 报文头中;
主要是供 “发送端” 向 “接收端” 提供本端信息(不论“发送端”是客户端还是服务器,都通用)。
例如:
Date: Tue, 3 Oct 1974 02:16:00 GMT # 用于说明报文创建的时间
Connection: keep-alive # 用于客户端与服务器之间指定与连接有关的选项
MIME-Version: # 指示发送端所使用的MIME版本
Transfer-Encoding: # 告知接收端为了保证报文的可靠传输,本端对报文采用的编码方式
(2)请求首部:
提供更多有关请求的信息,用于客户端向服务器传递一些额外信息,用于客户端向服务器说明 是谁在发送请求、请求源于何处,以及客户端希望获得什么样的响应、客户端处理响应的能力(客户端的喜好及能力)。
例如:
Accept: */* # 指示客户端希望收到什么类型的数据
Accept-Charset: # 告知服务器能够发送哪些 字符集
Accept-Encoding: # 告知服务器能够发送哪些 编码方式
Accept-Language: # 告知服务器能够发送哪些 语言
(3) 响应首部:
提供更多有关响应的信息,响应头部用于服务器向客户端提供更多的额外信息。
例如:
Server: Tiki-Hut/1.0 # 通知客户端本服务器的类型和版本
(4)扩展首部:
描述主体(HTTP报文体)的长度和内容,或者资源本身。
例如:
Content-Type: text/html; charset=iso-latin-1
(5)扩展首部:
规范中没有定义的新首部。