HTTP
超文本传输协议(Hypertext Transfer Protocol,HTTP)是应用层协议。
处理HTTP协议的系统组成:客户端 - 代理 - 服务端
代理的作用:
- 缓存。如浏览器缓存
- 过滤。如家长控制
- 负载均衡
- 认证。控制访问权限
- 日志。存储历史信息
HTTP流程
1. 打开TCP连接
TCP 连接被用来发送一条或多条请求,以及接受响应消息。
客户端可能打开一条新的连接,或重用一个已经存在的连接,或者也可能开几个新的 TCP 连接连向服务端。
2. 发送HTTP请求报文
HTTP 报文(在 HTTP/2 之前)是语义可读的。
在 HTTP/2 中,这些简单的消息被封装在了帧中,这使得报文不能被直接读取,但是原理仍是相同的。
有两种 HTTP 报文的类型,请求与响应,每种都有其特定的格式。
请求报文:
GET /index.html HTTP/1.1
Host: developer.mozilla.org
Accept-Language: zh
组成部分:
- 方法:GET、POST等
- 资源路径:
/index.html
- 协议版本:
HTTP/1.1
- 标头:Host、Accept-Language等
- 请求体:POST方法在请求体内包含需要发送的资源
3. 读取服务端返回的HTTP响应报文
响应报文:
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html>…(此处是所请求网页的 29769 字节)
组成部分:
- 协议版本:
HTTP/1.1
- 状态码:
200
- 状态信息:
OK
,是对状态码的描述 - 标头:与请求标头类似
- 响应体(可选项):包含获取到的资源
4. 关闭TCP连接或重用连接
关闭连接。HTTP1.0默认关闭
Connection: close
持久连接。HTTP1.1默认开启
Connection: keep-alive