1. 请求/响应 报文组成
请求报文 由 请求方法(Methods)、请求URI(request-URI)、协议版本、可选的请求首部字段(Headers) 和 内容实体 组成
响应报文 由 协议版本、状态码(status code)、原因短语(reason-phrase)、可选的首部字段(Header field) 和 资源实体的主体(entity body) 组成
2. HTTP是无状态的协议(Stateless)
HTTP协议自身并不对请求和响应之间的通信状态进行保存,也就是说HTTP协议对于发送过的请求或者响应不做持久化处理。
meaning每当有新的请求发送时,就有新的响应生成。可通过Cookie实现状态管理
3. 指定request-URI的方式
1. URI作为完成的reuqest-URI
GET http://hacker.jp/index.html HTTP/1.1
2. 在首部字段Host中写明网络域名或者IP地址
GET /index.html HTTP/1.1
Host: hackr.jp
4. HTTP方法Methods
GET | 请求URI资源 该资源经服务器端解析后返回响应内容 文本?原样返回:返回接口程序执行后输出结果 |
POST | 传输实体的主体 POST功能与GET相似 但其目的并非获取响应主体内容 |
PUT | 像FTP协议一样上传文件 在请求报文主体包含文件内容 保存至请求URI指定的位置 不安全 |
DELETE | 用来删除文件 与PUT方法相反 不带验证机制 不安全 |
HEAD | 与GET方法一样 但不返回报文主体部分 用于确认URI有效性及资源更新日期时间等 |
OPTIONS | 查询指定request-URI支持的方法 |
TRACE | 追踪路径 不常用 易引发XSF攻击(Cross-Site Tracing) |
CONNECT | 要求用隧道协议连接代理 主要使用SSL(Secure Socket Layer)和TLS(Transport Layer Secure) |
绿色背景的方法是HTTP/1.1特有支持的方法 其余上方5个是HTTP/1.0与HTTP/1.1共有的。
5. 持久连接
在HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接
这样的话 在请求包含很多其他资源的HTML页面时 会造成很多无谓的TCP连接的建立和断开 增加通信量的开销
持久化连接(HTTP Persistent Connections/HTTP keep-alive/HTTP connection reuse)
其特点是:只要任意一端没有明确提出分手,就继续在一起(WTF 断开,就保持TCP连接状态)
HTTP/1.1中,所有连接默认都是持久连接
6. Pipelining管线化
持久连接使得多数请求以管线化方式发送成为可能
就是说:多个请求能并行发送 而不需要一个接一个地等待响应了
7. 使用Cookie实现状态管理
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态
Cookie获取过程:
客户端初次发送请求---服务器生成Cookie---在响应中通过set-Cookie首部字段添加Cookie---客户端保存Cookie
客户端后续发送请求---带上Cookie信息---服务器检查Cookie---识别用户---返回响应