HTTP 是面向事务的应用层协议。
HTTP 的操作过程
用户点击一个超链接后发生的事件:
- 浏览器分析该 URL,以获取协议(HTTP、HTTPS)、主机名、端口号、路径等
- 浏览器向 DNS 请求解析主机名的 IP 地址
- 域名系统 DNS 解析出 IP 地址
- 浏览器与该 IP 地址的服务器建立 TCP 连接(HTTP 默认端口 80,HTTPS 默认端口 443)
- 浏览器发出 HTTP 请求:GET /路径名
- 服务器通过 HTTP 响应把路径的文件发送给服务器
- 释放 TCP 连接
- 浏览器解释获得的文件 index.html,并显示 Web 页面
HTTP 的特点
- HTTP 是无连接的,因为在传输层建立了 TCP 连接,所以 HTTP 方面是没有 HTTP 连接的
- HTTP 是无状态的,服务器不会记录客户端访问记录,同一个客户端两次相同参数的 HTTP 访问,得到的 HTTP 响应是相同的。因为无状态,所以若要跟踪用户活动,就需要使用 Cookies。
- HTTP 既可以使用非持续连接(HTTP/1.0),也可以使用持续连接(HTTP/1.1)
请求一个 WWW 文档需要的时间
非持续连接下:
持续连接下,可以将 HTML 文档和一些 assets 分开传输,可以节省加载时间:
持续传输下,还可以使用流水线,所有的请求和响应都是连续发送,则获取所有 assets 只需要 1 个 RTT,连续发送的量需要收到发送窗口的限制。
HTTP 的报文结构
Header 中的 Connection 字段值为 Close 表示非持续连接,keep-alive 表示持续连接