请求报文
是由请求方法
、请求 URI
、协议版本
、可选的请求首部字段和内容实体构成的响应报文
由协议版本
、状态码
、用以解释状态码的原因短语
、可选的响应首部字段以及实体主体构成HTTP
是一种无状态协议
,引入了Cookie
实现状态管理.
HTTP方法
- GET: 获取资源,请求访问已被
URI
识别的源 - POST: 传输实体主体,
- PUT: 传输文件,类似FTP,需要在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置.(没有验证机制)
- HEAD: 获得报文首部,和GET类似,只是不返回报文主体,一般确认URI有效性,及资源更新的日期时间等
- DELETE: 删除文件,与PUT相反(不带验证功能)
- OPTIONS: 询问支持的方法.返回GET,PUT….
- TRACE: 追踪路径.让web服务器端将之前的请求通信环回给客户端的方法.容易发生XST(跨站篡改),因此通常不会用到
- CONNECT: 要求用隧道协议链接代理.要求与代理服务器通信时采用隧道协议进行TCP通信
因为PUT 和 GET 都不带验证功能,因此需要在
有借助web应用程序的验证机制
和遵守REST标准时
才有可能开放使用.
持久连接
减少了 TCP 连接的重复建立和断开所造成的 额外开销,减轻了服务器端的负载,加快 web的 显示速度
管线化
不用等待
上一个请求响应
即可直接发送下一个请求
,者得益于持久连接
Cookie状态管理
HTTP协议是无状态协议.使用Cookie
可以保存登录状态…,
首次请求时,服务器会生成
Cookie
,并添加到响应中
下次客户端请求带上Cookie
,服务器通过Cookie
查找记录,得到之前的状态信息.
HTTP报文内的HTTP信息
HTTP 报文
大致可分为报文首部
和报文主体
两块。两者由最初出现的空行(CR+LF)来划分- 一般有 4 种首部,分别是:
通用首部
、请求首部
、响应首部
和实体首部
- 常用的内容编码有:
gzip(GNU zip)
,compress(UNIX 系统的标准压缩)
,deflate(zlib)
,identity(不进行编码)
- 大量数据时,可通过
分块传输
,客户端再根据 区块复原
- HTTP中使用了
多部分对象集合
(Multipart)的方法- 通过
范围请求
实现中断处恢复
- 同一个Web网站可能存在多个相同内容的页面,通过
内容协商
实现中英文
适配,编码适配等(通过Accept
首部信息).