Web
Web,或万维网(World Wide Web),是一个互联网应用。
它本质上是一个信息空间,在其中,文档和其他 Web 资源通过
网页(web page):即文档,包括一个基础 HTML 文件与若干被 URL 标识的对象。
URL:
- 协议(scheme):
https ://- 主机(host)域名或 IP:
thisisxxz.com - 路径(path):
/wiki/note-networks/web-http.html
HTTP/1.X
Web 的应用层协议是超文本传输协议(Hypertext Transfer Protocol, HTTP)。是用户-服务器模型。其中:
- 用户程序:浏览器,HTTP 请求(request),获取并渲染 Web 资源
- 服务器程序:Web 服务器,HTTP 响应(response),发送 Web 资源
HTTP 本身是
HTTP/1.0:非持久(non-persistent)连接。请求一个对象就要开一个 TCP 连接。
HTTP/1.1:持久(persistent)连接。多个对象甚至网页都能通过单条持久 TCP 连接传输。HTTP 服务器会在连接一段时间内未使用后将其关闭。
HTTP 请求消息:
- 请求行(request line):GET, POST, HEAD, PUT, DELETE [path] [scheme]
- 头(headers)
- 请求体(entity body):给 POST,PUT 用于上传
HTTP 响应消息:
- 状态行(status line):200 OK, 301 Moved Permanently, 400 Bad Request, 403 Forbidden, 404 Not Found, 500 Internal Server Error, 505 HTTP Version Not Supported
- 头(headers)
- 响应体:发送 Web 资源
Cookies
我们都爱魔法饼干!
Cookies 在无状态的 HTTP 上构建一个用户会话层(user session layer)。Cookie 首先在服务器端生成,存储在后端数据库里,并向用户端浏览器中 Set。用户端浏览器在 Cookie 文件中记录该 Cookie,在每次向服务器端发送请求时附上 Cookie 头。
- HTTP 响应消息中的一行 Cookie 头
Set-cookie - HTTP 请求消息中的一行 Cookie 头
Cookie - 存放在用户端系统上,由浏览器管理的 Cookie 文件(主机名是键,Cookie 是值)
- 服务器端的后端数据库(Cookie 是键,服务器状态等是值)
代理服务器
代理服务器(proxy server),又称 Web 缓存(Web caching)。
代理服务器是源 Web 服务器(origin Web server)的缓存,它有自己的磁盘存储,在其中保存最近请求过的对象副本,以更迅速的满足 HTTP 请求。客户端与代理服务器间通常存在高速连接。
代理服务器通常由 ISP 购买并部署。
conditional GET 是代理服务器确认其储存的对象副本是否过时的方式,通过在 GET 请求中加入 If-Modified-Since 的头实现。
HTTP/2.0
HTTP/1.1 单条持久 TCP 连接的问题:
此外,TCP 拥塞控制机制使共享同一瓶颈链路的每条 TCP 连接均分带宽份额,通过为传输单个 Web 页面打开多条 TCP 连接,浏览器可以「作弊」占用更大份额的链路带宽!
HTTP/2 的目标:消除,或至少是减少为传输单个 Web 页面所建立的并行 TCP 连接数量;同时缓解 HOL。
HTTP/2 的分帧子层(framing sub-layer):
- 将每条 HTTP 响应拆分为多帧,并交错(interleaved)着通过单条持久化 TCP 连接发送出去(把「深度发送」变为「宽度发送」,减少用户感知时延)。
- 拆帧后还会进行二进制编码,易于高效解析与错误恢复。
- 帧到达客户端后在分帧子层重组为原始响应再交由浏览器处理。
HTTP/2 的消息优先级(message prioritization):客户端并发的向服务器发送请求时会附上权重;服务器按照该权重优先发送高优先级响应的各帧。
HTTP/2 的服务器推送(server push):服务器能够解析基础 HTML 文件,识别出所需的对象,并在客户端发起对这些对象的显示请求之前就向它推送。
HTTP/3.0
2022 年 7 月标准化。
QUIC,基于 UDP 的多工传输协议。