HTTP
- 网页(Web 页,或称文档)由许多对象组成。
- 对象就是文件
- 网页由单个基本 HTML 文件和若干个所引用的对象
- 每个对象被一个 URL(统一资源定位符)寻址
- HTTP 使用 TCP 协议
- HTTP 服务器使用 80 端口
- HTTP 是无状态协议(不维护客户先前的状态信息)
非持久 HTTP 连接
- 每个 TCP 连接上只传送一个对象
- 每个对象总共需要 2 个 RTT+transmit time
- 一个 RTT: 建立连接,
- 另一个 RTT:HTTP 请求和响应的交互信息
- 操作系统必须为每个 TCP 连接分配主机资源
- 大量客户的并发 TCP 连接形成服务器的严重负担
- HTTP/1.0 使用非持久 HTTP 连接
持久 HTTP 连接
- 一个 TCP 连接上可以传送多个对象
- 服务器发送响应消息后保持连接
- 同一 TCP 连接上会话的后续 HTTP
- 消息继续在该连接上传送
- HTTP/1.1 默认使用持久 HTTP 连接
响应时间模型(RTT)
定义往返时间 RTT:一个分组从 C 到 S 再到 C 所花费的时间
非持久 HTTP 连接:每个对象需要两个 RTT,大量并发 TCP 会造成服务器的严重负担
持久 HTTP 连接:分为不带流水线的持久 HTTP 连接和带流水线的持久 HTTP 连接
不带流水线:
- 客户先前响应消息收到,才发出新的请求消息
- 每个引用对象经历 1 个 RTT
带流水线:
- 客户遇到 1 个引用对象就发送请求消息
- 所有引用对象只经历 1 个 RTT
- HTTP/1.1 默认使用
报文格式
- 请求行
- 头部
- 响应报文中的 Date 是报文响应时间
- Last-Modified 才是对象创建或最后修改时间。
- 回车换行表示结束
- 数据(响应)
- HTTP 响应报文可以为空
请求方法
HTTP/1.0
- GET
- POST
- HEAD
- 服务器收到请求时,用 HTTP 报文进行响应,但不返回请求对象
HTTP/1.1
- GET, POST, HEAD
- PUT
- 文件在实体主体中被上载到 URL 字段指定的路径
- DELETE
- 删除 URL 指定字段的文件
状态相应码
2 开头都是成功,3 开头有特定功能,4 以上就是各种错误了
- 200 OK
- 请求成功, 所请求信息在响应消息中返回
- 301 Moved Permanently (永久重定向)
- 所请求的对象已永久迁移, 新的 URL 在本响应消息的(location:)头部指出
- 400 Bad Request
- 该请求不能被服务器解读
- 404 Not Found
- 服务器上不存在所请求文档
- 505 HTTP Version Not Supported
Web 缓存
- 条件 GET:If-modified-since:
<date>
- Cookies