HTTP
1. HTTP 的特点
- 简单,HTTP 大体上还是被设计得简单易读。HTTP 报文能够被人读懂,还允许简单测试,降低了门槛,对新人很友好。
- 可扩展,只要服务端和客户端就新
headers达成语义一致,新功能就可以被轻松加入进来,可见 HTTP 的灵活性很好; - 无状态,在同一个连接中,两个执行成功的请求之间是没有关系的。而使用 HTTP的头部扩展,
HTTP Cookies能创建有状态的会话,就可以解决这个问题; - 通过请求和响应的交换达成通信。请求由客户端发出,而服务器端回复响应;
- 可靠传输,底层依托 TCP 协议;
- 无连接,HTTP 依赖于面向连接的
TCP进行消息传递,但连接并不是必须的。HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接,请求/响应 完成之后就会断开连接。
2. HTTP 报文组成
HTTP 报文大致可以分为 报文首部 和 报文主体 两部分,这两部分用空行划分(CR+LF,CR 表示回车符,十六进制是 0x0d;LF 表示换行符,十六进制是 0x0a)
- 报文首部:服务器端或客户端需处理的请求或响应的内容及属性;
- 报文主体:应被发送的数据。
报文首部
空行(CR+LF)
报文主体
客户端的 HTTP 报文叫做请求报文,服务器端的报文 HTTP 报文叫做响应报文。HTTP 请求报文包括:
- 请求行;
- 请求首部字段;
- 通用首部字段;
- 实体首部字段;
- 其他(可能包含 HTTP 的 RFC 里未定义的首部,如
Cookie等);
HTTP 响应报文包括:
- 响应行;
- 响应首部字段;
- 通用首部字段;
- 实体首部字段;
- 其他(可能包含 HTTP 的 RFC 里未定义的首部,如
Cookie等);