HTTP outline

  • HTTP:超文本传输协议;
    • Web应用的应用层协议;
  • 采用的服务模型: C/S mode:
    • Client:请求、接收和显示Web对象的浏览器
    • Sevrver:对请求进行响应,发送对象的Web服务器;
  • 使用Internet服务中的TCP:
    • Port :80;
    1. 客户端发起一个TCP连接。
    2. 服务器接收TCP连接。
    3. 客户端确认链接,并且发送HTTP请求报文。
    4. 服务器发送HTTP响应报文。
    5. TCP连接关闭
  • http是默认是无状态的协议。
    • 服务器不维护客户端的状态。
    • 这让协议实现简单,不维护状态。
    • web服务器如果需要维护客户端的状态,需要添加一种名叫cookie的机制。
  • 提高用户体验,减少公网流量:web cache

    持久连接与非持久连接

非持久HTTP

  • 最多只有一个对象在TCP连接上发送;
  • 下载多个对象需要多个TCP连接;
  • HTTP/1.0 使用非持久连接;

    持久HTTP

  • 多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输

  • HTTP/1.1 默认使用持久连接
    • 流水方式的HTTP请求:每遇到一个对象,就发起一次请求。
    • 非流水方式:收到应答才发出新的请求。

      持久的更现代一点,因为现代的html文件往往具有特别多的对象,是一次链接请求不完的。 通过持久连接,减少了不必要的连接建立的时间。

HTTP的报文格式

  1. GET /hallo HTTP/1.1
  2. Host: cs.edu.cn
  3. Connection: close
  4. body
  • 请求报文:一个请求行,加多个首部行,加一个可能的body部分。
  • 响应报文:一个状态行,加多个首部行,加一个可能的body部分。
  1. HTTP/1.1 200 OK
  2. Date: Mon, 21 Mar 2022 07:21:41 GMT
  3. Server: Apache
  4. Last-Modified: Thu, 13 Dec 2018 15:45:29 GMT
  5. ETag: "e-57ce93446cb64"
  6. Accept-Ranges: bytes
  7. Content-Length: 14
  8. Connection: close
  9. Content-Type: text/plain
  10. Hello, CS144!

状态行的显示一个状态码,与状态码的解释。HTTP的报文是以ASCII吗的形式传送的。

Cookie:标识用户

由于http本身不维护用户的状态,当web服务器需要用户的状态时,就需要添加cookie机制。

cookie可以用于标识一个用户。用户首次访问一个站点时,可能需要提供一个用户标识(可能是名字)。在后继会话中,浏览器向服务器传递一个cookie首部,从而向该服务器标识了用户。

因此cookie可以在无状态的HTTP之上建立一个用户会话层。例如,当用户向一个基于Web的电子邮件系统(如Hotmail)注册时,浏览器向服务器发送cookie 信息,允许该服务器在用户与应用程序会话的过程中标识该用户。

尽管cookie方便了用户的购物行动,但是它也被认为是对用户隐私的一种侵犯。因为cookie维护了许多与用户有关的信息,例如个人偏好,这些信息也有可能被卖给第三方。

Web 缓存

Web cache,也叫代理服务器proxy serverWeb缓存保存最近请求过的对象的副本。

可以配置用户的浏览器,使得用户的所有HTTP请求首先指向Web缓存器。一旦某浏览器被配置,每个对某对象的浏览器请求会被定向到该Web cache。如果这个请求在Web缓存中存在,Web缓存会发送一个条件GET来向原始服务器查询,请求的对象是否被修改。如果没有被修改,则直接返回给用户服务器结果。

这样大大减少了来自公网上的流量,因为条件GET的确认是很轻量的,但是GET的对象可能是很大的。

Q&A

为什么要提供Web cache?

  • 降低客户端的请求响应时间,提升用户体验。
  • 可以大大减少一个机构内部网络与Internent接入链路上的流量,减少了流量支出。
  • 互联网大量采用了缓存:可以使较弱的ICP也能够有效提供内容。

diff CDN,Web cache?