http
-
http报文:报文首部 cr+lf 报文主体
-
请求报文:请求行 请求首部 通用首部 实体首部
方法 说明 支持的HTTP协议版本 GET 获取资源 接收的请求正在处理 POST 传输实体主体 1.0、1.1 PUT 传输文件 1.0、1.1 HEAD 获得报文首部 1.0、1.1 DELETE 删除文件 1.0、1.1 OPTIONS 询问支持的方法 1.1 TRACE 追踪路径 1.1 CONNET 要求用隧道协议链接代理 1.1 LINK 建立和资源之间的联系 1.0 UNLINK 断开连接关系 1.0 -
响应报文:响应行 响应首部 通用首部 实体首部
状态码 类别 原因短语 1xx Informational(信息性状态码) 接收的请求正在处理 2xx Success(成功状态码) 请求正常处理完毕 3xx Redirection(重定向状态码) 需要进行附加操作以完成请求 4xx Client Error(客户端错误状态码) 服务端无法正常处理请求 5xx Server Error(服务器错误状态码) 服务器处理请求出错 -
报文主体≈实体主体,传输中进行编码操作时,实体主体的内容发生变化,才导致它与报文主体有差异。
-
内容编码压缩
- gzip(GNU zip)
- compress(UNIX系统的标准压缩)
- deflate(zlib)
- identity(不进行编码)
-
分块传输编码(Chunked Transfer Coding):将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。
-
MIME
-
范围请求(Range Request):获取部分内容的请求。Range: bytes = 5000-10000
-
请求首部
-
响应首部
https
http缺点:
- 通信使用明文,内容易窃听
- 不验证通信方身份,易伪装
- 不证明报文完整性,易篡改
防护手段
- 加密:对称/非对称,密钥,公开密钥加密,共享密钥加密
- 认证:证明公开密钥正确的证书,公钥证书,CA(数字证书认证机构)
- 摘要:MAC(Message Authentication Code)
- 预置证书:客户端会预置一些公钥证书
安全通道建立
Client | 方向 | Server |
---|---|---|
①Handshake:ClientHello | ——————> | 客户端支持的SSL的指定版本,加密组件列表(加密算法和密钥长度) |
SSL的指定版本,加密组件。加密组件是从客户端筛选出来的 | <—————— | ②Handshake:ServerHello |
公开密钥证书 | <—————— | ③Handshake:Certificate |
最初协商(第一次握手)结束 | <—————— | ④Handshake:ServerHelloDone |
⑤Handshake:ClientKeyExchange | ——————> | 包含Pre-master secret随机字符串,并使用③的证书加密 |
⑥ChangeCipherSpec | ——————> | 提示服务器,此报文之后会使用Pre-master secret密钥加密 |
⑦Handshake:Finished | ——————> | 包含连接至今全部报文的整体校验值。协商是否成功以服务器能否正确解密该报文为准 |
<—————— | ⑧ChangeCipherSpec | |
<—————— | ⑨Handshake:Finished | |
⑩Application Data(HTTP) | ——————> | 发送HTTP请求 |
发送HTTP响应 | <—————— | ⑪Application Data(HTTP) |
⑫Alert:warning, close notify | ——————> | 这步之后再发送TCP_FIN来关闭TCP连接 |
以上流程会生成MAC(Message Authenticagtion Code)的报文摘要。MAC能够查知报文是否被篡改,从而保护报文的完整性。
下图是对整个流程的图解。
http追加协议
HTTP瓶颈
- 一条连接上只可发送一个请求
- 请求只能从客户端开始。客户端不可以接收出相应以外的指令
- 请求/响应首部未经压缩就发送。首部信息越多延迟越大
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多
- 可任意选择数据压缩格式。非强制压缩发送
SPDY
- 多路复用流:通过单一的TCP链接,可以无限制处理多个HTTP请求
- 赋予请求优先级
- 压缩HTTP首部:压缩HTTP请求和响应的首部
- 推送功能:服务器主动向客户端推送数据
- 服务器提示功能
HTTP/2.0
方案
- SPDY
- HTTP Speed + Mobility
- Network-Friendly HTTP Upgrade