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