计算机网络基础小记 06 - 应用层 - Web 与 HTTP

Web 应用

World Wide Web(www,万维网):

  • 网页,
  • 网页相互链接

网页包含多个对象:

  • HTML 文件、JPEG 图片、视频文件、动态脚本……
  • 基本 HTML 文件中包含对其它对象引用的链接

对象的寻址:

  • 统一资源定位器(URL)格式:Scheme://host:port/path
  • 如:https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png

Web 应用遵守的协议:超文本传输协议(HyberText Transfer Protocol,HTTP)

HTTP 协议概述

应用于 C/S 结构

  • 客户 —— Browser:请求、接收、展示 Web 对象
  • 服务器 —— Web Server:响应客户的请求,发送对象

版本:

  • 1.0:RFC 1945,非持续连接
  • 1.1:RFC 2068,持续连接

使用 TCP 传输服务:

  1. 服务器在 80 端口等待客户请求
  2. 浏览器发起到服务器的 TCP 连接(创建套接字 Socket)
  3. 服务器接受来自浏览器的TCP连接
  4. 浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器端)交换 HTTP 信息
  5. 关闭 TCP 连接

无状态:

  • 服务器不维护任何有关客户端过去所发请求的信息
  • 解决方法 Cookie

为什么不使用有状态的协议?

  • 需要维护状态(历史信息)
  • 如果 C 或 S 失效,会产生状态不一致,解决这种不一致代价高

HTTP 连接

HTTP 连接的两种类型:非持久性连接 和 持久性连接

非持久性连接

  • 每个 TCP 连接最多允许传输一个对象

  • HTTP 1.0 采用

  • RTT(Round Trip Time):从客户端发送一个很小的数据包到服务器并返回所经历的时间

  • 响应时间:

    1. 发起、建立 TCP 链接:1 RTT
    2. 发送 HTTP 请求消息、接收 HTTP 响应消息的前几个字节 1 RTT
    3. 响应消息中多包含的文件/对象传输时间

    共计:2 RTT + 文件发送时间

实例:

假定用户在浏览器输入 URL:www.someSchool.edu/someDepartment/home.index,包含文本和指向 10 个 jpeg 图片的链接

  1. HTTP 客户端向地址为 www.someSchool.edu/someDepartment/home.index 的服务器上的 HTTP 服务器进程(端口 80)发起 TCP 连接请求
  2. HTTP 服务器在端口 80 等待 TCP 连接请求,接受连接并通知客户端
  3. HTTP 客户端将 HTTP 请求消息(包含 URL 地址)通过 TCP 连接的套接字发出,消 息中所含的 URL 表明客户端需要对象 someDepartment/home.index
  4. HTTP服务器收到请求消息,解析,产生包含所需要对象的响应消息,并通过套接字发给客户端
  5. HTTP 服务器关闭 TCP 连接
  6. HTTP 客户端收到响应消息,解析 html 文件,显示 html 文件,发现有 10 个指向 jpeg 对象的超连接
  7. 为每个 jpeg 对象重复步骤 1-5

存在问题:

  1. 每个对象需要 2 RTT
  2. 操作系统需要为每个 TCP 链接开销资源

持久性连接

  • 每个 TCP 连接允许传输多个对象

  • HTTP 1.1 采用

  • 发送响应后,服务器保持 TCP 连接的打开

    后续的 HTTP 消息可以通过这个连接发送

持久性连接还分为无流水线的持久性连接带有流水机制的持久性连接

  1. 无流水(pipelining)的持久性连接

    客户端只有收到前一个响应后才发送新的请求

    每个被引用的对象耗时 1 RTT

  2. 带有流水机制的持久性连接

    HTTP 1.1 的默认选项

    客户端只要遇到一个引用对象就尽快发出请求

    理想情况下,收到所有的引用对象只需耗时约 1 RTT

HTTP 消息格式

HTTP 协议有两类消息:请求消息(Request)、响应消息(Response),均采用 ASCII(人可读)

请求消息

20211125_01

HTTP 请求消息的通用格式:

20211125_02

请求消息上传数据:

  • POST 方法:在请求消息的消息体(entity body)中上传客户端的输入,常用于填表
  • URL 方法:使用 GET 方法,输入信息通过请求行(request line)的 URL 字段上传

协议中的方法(method)类型:

  • HTTP 1.0 中:GET、POST、HEAD(要求 Server 不要将所请求的对象放入响应消息中)
  • HTTP 1.1 中:GET、POST、HEAD、PUT(将消息体中的文件上传至 URL 字段所指定的路径)、DELETE(删除 URL 字段所指定的文件)

响应消息

20211125_03

响应消息的第一行状态码:

  • 200 OK
  • 301 Moved Permanently
  • 400 Bad Request
  • 404 Not Found
  • 505 HTTP Version Not Supported
  • ……

HTTP 协议是无状态的,很多应用需要服务器掌握客户端的状态,如购物车,怎么办?

Cookie 技术:某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

Cookie 的组件:

  • HTTP 响应消息的 Cookie 头部行
  • HTTP 请求消息的 Cookie 头部行
  • 保存在客户端主机上的 Cookie 文件,由浏览器管理
  • Web 服务器端的后台数据库

**Cookie 的应用:**身份认证、购物车、推荐、Web e-mail……

存在隐私问题

Web 缓存/代理服务器技术

在不访问服务器的前提下满足客户端的 HTTP 请求

  • 缩短客户请求的响应时间
  • 减少机构/组织的流量
  • 在大范围内(Internet)实现有效的内容分发

Web 缓存/代理服务器:

  1. 用户设定浏览器通过缓存进行 Web 访问

  2. 浏览器向缓存/代理服务器发送所有的 HTTP 请求

    如果所请求对象在缓存中,缓存返回对象

    否则,缓存服务器向原始服务器发送 HTTP 请求,获取对象,然后返回给客户端并保存该对象

  • 缓存既充当客户端,也充当服务器
  • 一般由 ISP 架设

条件 GET 方法

如果缓存有最新的版本,则不需要发送请求对象

缓存:在 HTTP 请求消息中用 If-modified-since 字段声明所持有版本的日期 If-modified-since: <date>

服务器:如果缓存的版本是最新的,则响应消息中不包含对象,返回 HTTP/1.0 304 Not Modified

20211125_04