DJ2-2 Web 应用和 HTTP 协议

目录

一、Web 和 HTTP 常用术语

二、HTTP

1、HTTP 概述

2、TCP 和 HTTP

3、HTTP 连接

(1)非持久 HTTP 连接

plus 往返时间 RTT 和三次握手

(2)持久 HTTP 连接

(3)计算 TCP 和 RTT 举例

4、HTTP 请求报文

(1)报文格式

(2)方法类型

5、HTTP 响应报文

(1)报文格式

(2)HTTP 响应的状态码

6、Cookies:跟踪用户

三、Web 缓存(代理服务器)

1、Web 缓存的工作原理

2、为什么需要 Web 缓存器?

3、举例说明

四、条件 GET 方法


一、Web 和 HTTP 常用术语

DJ2-2 Web 应用和 HTTP 协议_第1张图片

1)网页(Web 页,或称文档)是由许多对象组成的。

2)对象就是文件,可以是 HTML 文件、JPEG 图像、Java applet、音频文件等。

  • 其中 HTML 文件是最基本的对象,是一个网页的框架

3)多数网页由单个基本 HTML 文件和若干个所引用的对象构成。

  • 一个 HTML 文件
  • 若干个所引用的对象

4)每个对象被一个 URL(Uniform Resource Locator,统一资源定位符)寻址。

  • URL 是唯一的文件定位方式
  • URL 指向的是 HTML 文件,HTML 文件里又有各个对象的 URL

5)URL 举例:

  • 默认的端口号是 80,若想更改则可写作 “主机名: 端口号”
  • Web 服务器监听的是 80 端口

DJ2-2 Web 应用和 HTTP 协议_第2张图片

  • 主机名和 IP 地址之间是互为映射的关系
  • 路径名用于指示文件在主机的哪个目录下

这并不是真实的 OS 管理目录,而是由服务器管理的一个相对路径。假设服务器设置的根目录为 C:\root\,则路径为 C:\root\item\IZ*ONE\22884952 。

二、HTTP

DJ2-2 Web 应用和 HTTP 协议_第3张图片

1、HTTP 概述

HTTP:hypertext transfer protocol,超文本传输协议

1)是 Web 的应用层协议

  • 浏览器一般都默认使用 http 协议

2)采用 C/S 模式

  • client:浏览器请求、接收、“解释显示” Web 对象。
  • server:Web 服务器响应请求,发送 Web 对象。

应用程序的体系结构

3)具体协议

  • HTTP 1.0: RFC 1945
  • HTTP 1.1: RFC 2616

2、TCP 和 HTTP

1)HTTP 使用 TCP 的服务

Browser(HTTP client,HTTP 客户)和 Web 服务器(HTTP server,HTTP 服务器)

  1. 客户初始化一个与 HTTP 服务器 80 端口的 TCP 连接(创建套接字)
  2. HTTP 服务器接收来自客户的 TCP 连接请求,建立连接
  3. Browser 和 Web 服务器交换 HTTP 消息(应用层协议消息),包括 HTTP 请求和响应消息
  4. 最后结束(或叫关闭)TCP 连接

2)HTTP 是无状态协议

HTTP 服务器不维护客户先前的状态信息。

即,每一对请求和响应之间都是相互独立的。

维护状态的协议非常复杂!

  • 必须维护过去历史(状态信息)
  • 如果 C 或 S 崩溃,则它们各自的状态视图可能不一致,因此必须保持协调一致

3、HTTP 连接

非持久 HTTP 连接 持久 HTTP 连接
特点

每个 TCP 连接上只传送一个对象,下载多个对象需要建立多个 TCP 连接。

一个 TCP 连接上可以传送多个对象。

应用 HTTP/1.0 使用非持久 HTTP 连接。 HTTP/1.1 默认使用持久 HTTP 连接。

(1)非持久 HTTP 连接

假设用户输入 URL:

http://www.someSchool.edu/someDepartment/home.index

1a)HTTP 客户初始化 1 个与服务器主机 www.someSchool.edu 中 HTTP 服务器的 TCP 连接。

1b)www.someSchool.edu 服务器主机中的 HTTP 服务器在 80 端口监听来自 HTTP 客户的 TCP 连接请求:收到连接请求、接受、建立连接、通知客户。

在客户和服务器上分别有一个套接字与该 TCP 连接相关联

2)HTTP 客户发送 1 个 HTTP 请求消息(request message)包含 URL 到自身 TCP 连接套接字。消息指出客户需要的 Web 对象:someDepartment/home.index 。

3)HTTP 服务器接收请求消息,产生 1 个响应消息(response message)包含被请求对象,并发送这个消息到自身 TCP 连接套接字。

4)HTTP 服务器结束 TCP 连接。(但是直到 TCP 确认客户已经完整地收到响应报文为止,它才会实际中断连接。)

5)HTTP 客户接收包含 HTML 文件的响应消息:显示 HTML、解析 HTML 文件、找出 10 个引用 JPEG 对象。

6)分别对 10 个引用 JPEG 对象重复步骤 1~5 。即,立即建立 10 个 TCP 连接,发送请求,等待响应。这是一个并发的过程。

plus 往返时间 RTT 和三次握手

往返时间 RTT:一个短分组从客户主机到服务器再到客户主机所花费的时间。

Round-Trip Time

  • 传播时延
  • 排队时延
  • 节点处理时延

三次握手:

  1. 客户向服务器发送一个小 TCP 报文段
  2. 服务器用一个小 TCP 报文段做出确认和响应
  3. 客户向服务器返回确认

三次握手中前两个部分所耗费的时间占用了一个 RTT 。完成了三次握手的前两个部分后,客户 结合三次握手的第三部分 向该 TCP 连接发送一个 HTTP 请求报文。一旦该请求报文到达服务器,服务器就在该 TCP 连接上发送 HTML 文件。该 HTTP 请求/响应用去了另一个 RTT 。

响应时间:2RTT + transmit time

  1. 1 个 RTT 用于建立 TCP 连接
  2. 1 个 RTT 用于 HTTP 请求/响应消息的交互
  3. HTML 文件传输时间

DJ2-2 Web 应用和 HTTP 协议_第4张图片

我们暂且忽略文件分组的大小,即以文件的第一个 bit 的到达时刻为传输完毕时刻。那么,从建立 TCP 连接到获得包含 HTML 文件的响应信息,一共需要:2 个 RTT 。

随后,我们需要分别对 10 个引用 JPEG 对象重复步骤 1~5 :建立 TCP 连接 + HTTP 请求/响应。由于是并发执行的,因此需要花费时间:2 个 RTT 。

最终,我们一共需要花费时间:4 个 RTT 。

(2)持久 HTTP 连接

  • 服务器发送响应消息后保持连接。
  • 同一 客户/服务器的后续 HTTP 消息继续在该连接上传送。

不带流水线的持久 HTTP 连接

  • 客户收到上一个请求消息的响应消息后才发出新的请求消息。
  • 每个引用对象经历 1 个 RTT。

带流水线的持久 HTTP 连接

  • HTTP/1.1 默认使用。
  • 客户只要遇到引用对象就发送请求消息。
  • 所有引用对象只经历 1 个 RTT 。

DJ2-2 Web 应用和 HTTP 协议_第5张图片

(3)计算 TCP 和 RTT 举例

假设需要 1 个 HTML + 5 个 OBJs,且均在一个服务器上。

需要的 TCP 个数 需要的 RTT 个数
非持久 HTTP 连接 6 4
不带流水线的持久 HTTP 连接 1 7
带流水线的持久 HTTP 连接 1 3

假设需要 1 个 HTML + 3 个 OBJs,且均不在一个服务器上。

需要的 TCP 个数 需要的 RTT 个数
非持久 HTTP 连接 4 4
不带流水线的持久 HTTP 连接 4 4
带流水线的持久 HTTP 连接 4 4

4、HTTP 请求报文

1)有两类 HTTP 报文:请求报文(request),响应报文(response)

2)HTTP 请求报文采用 ASCII 文本,方便人们阅读。

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu 
User-agent: Mozilla/4.0      //该代理类型的对象版本
Connection: Close            //不使用持久连接
Accept-language:zh-cn        //中文版本

(额外的 回车换行)

(1)报文格式

DJ2-2 Web 应用和 HTTP 协议_第6张图片

设计特点:

  • 以行为单位,回车和换行为终止标志
  • 请求行为 1 行首部行为 n 行
  • 空行为 1 行,实现了变长的首部行的终止

cr 为回车,lf 为换行。

(2)方法类型

HTTP/1.0 HTTP/1.1
  • GET
  • POST
  • HEAD:服务器收到请求时,用 HTTP 报文进行响应,但不返回请求对象
  • GET,POST,HEAD
  • PUT:文件在实体主体中被上载到 URL 字段指定的路径
  • DELETE:删除 URL 字段指定的文件

上载表单的方法

1)Post 方法

  • 网页时常包含表单输入
  • 针对大量的表单输入
  • 输入值在请求报文的实体主体中被上载到服务器

2)URL 方法

  • 使用 GET 方法
  • 针对少量的表单输入
  • 表单(各字段)输入值作为 URL 请求行的字段被上载:
www.somesite.com/animalsearch?monkeys&banana

5、HTTP 响应报文

HTTP/1.1 200 OK
Connection:close
Date: Sat, 06 Aug 2011 12:00:15 GMT    //服务器产生响应报文的时间
Server: Apache/1.3.0 (Unix)            //Web服务引擎
Last-Modified: Thu, 22 Jun 2011 ...     //文件最后被修改时间
Content-Length: 6821 
Content-Type: text/html                //浏览器据此解析数据内容

data data data data data ...

(1)报文格式

DJ2-2 Web 应用和 HTTP 协议_第7张图片

(2)HTTP 响应的状态码

位于服务器响应客户的响应消息的第一行,几个常见的样本状态码如下。

状态码 含义
200 OK

请求成功,所请求信息在响应消息中返回。

301 Moved Permanently

所请求的对象已永久迁移,新的 URL 在本响应消息的(location:)头部指出。

400 Bad Request

该请求不能被服务器解读。

404 Not Found

服务器上不存在所请求文档。

505 HTTP Version Not Supported

6、Cookies:跟踪用户

让无状态技术 HTTP 拥有有状态能力。

1)味噌丸总是使用同一台 PC 访问 Internet;

2)TA 首次访问 1 个电子商务网站;

3)当 TA 最初发出 HTTP 请求访问该站点时,该站点为 TA 创建一个唯一的 ID,并在后端数据库创建一个响应于该 ID 的表项。

key word:唯一性标识;自我声明。

DJ2-2 Web 应用和 HTTP 协议_第8张图片

Cookies 的 4  个重要方面

  1. Cookie 头部行在 HTTP 响应消息中
  2. Cookie 头部行在 HTTP 请求消息中
  3. Cookie 文件保存在用户主机中并被用户浏览器管理
  4. Cookie 也保存在 Web 站点的后端数据库

Cookies 和隐私

  • Cookies 允许网站更加了解你
  • 你可以提供名字和 e-mail 给网站
  • 广告公司通过网站获得信息
  • Cookies 不适合游动用户(如:去网吧)

三、Web 缓存(代理服务器)

1、Web 缓存的工作原理

设置目的:代表起始服务器满足 HTTP 请求。

用户配置浏览器:使得用户的所有 HTTP 请求首先指向 Web 缓存器。

1)浏览器创建一个到 Web 缓存器的 TCP 连接,并向 Web 缓存器中的对象发送一个 HTTP 请求。

2)Web 缓存器进行检查,看看本地是否存储了该对象副本。如果有,Web 缓存器就向客户浏览器用 HTTP 响应报文返回该对象。

3)如果 Web 缓存器中没有该对象,它就打开一个与该对象的初始服务器的 TCP 连接。Web 缓存器则在这个缓存器到服务器的 TCP 连接上发送一个对该对象的 HTTP 请求。在收到该请求后,初始服务器向该 Web 缓存器发送具有该对象的 HTTP 响应。

Q:Web 缓存器是转发了客户的 HTTP 请求,还是自己写了一份 HTTP 请求。

4)当 Web 缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用 HTTP 响应报文发送该副本。

关系描述如下:

DJ2-2 Web 应用和 HTTP 协议_第9张图片

1)Web 缓存器既是客户机的服务器,又是起始服务器的客户机。

2)典型的 Web 缓存器由大学、公司或居民 ISP 提供。

2、为什么需要 Web 缓存器?

1)减少对客户机请求的响应时间

2)减少内部网络与接入链路上的通信量

3)能从整体上大大降低因特网上的 Web 流量

 

 

3、举例说明

1)情况一

假设

  • 对象平均长度 = 100,000 bits
  • 浏览器对对象的平均访问速率 = 15/sec
  • Internet 时延 = 2 sec

DJ2-2 Web 应用和 HTTP 协议_第10张图片

流量强度不是作为时延直接参与计算的,它只是能反映出时延的量级。流量强度趋于 1 也不代表排队一辈子,只是说明时延的量级是分钟级了,确实要花费很长时间。

结论

  • 局域网上的流量强度 = 0.15
  • 链路上的流量强度 = 1
  • 总延时 = Internet 时延 + 接入时延 + 局域网时延
  • 总延时 = 2 秒 + 数分钟 + 数毫秒

2)情况二

Q:Web 缓存器是转发了客户的 HTTP 请求,还是自己写了一份 HTTP 请求。可能的解决方法

  • 增大接入链路的带宽
  • 如:把接入链路的带宽增大为 10Mbps

结论

  • 局域网上的流量强度 = 0.15
  • 链路上的流量强度 = 0.15
  • 总延时 = Internet 时延 + 接入时延 + 局域网时延
  • 总延时 = 2 秒 + 数毫秒 + 数毫秒

缺点

  • 这种方案需要较大的投资
  • 如:需要向 ISP 付费

3)情况三

可能的解决方法

  • 安装 Web 缓存器
  • 假设缓存器的命中率为 0.4

DJ2-2 Web 应用和 HTTP 协议_第11张图片

结论

  • 局域网上的流量强度 = 0.15
  • 链路上的流量强度 = 1 * 0.6 = 0.6
  • 总延时 = Internet 时延 + 接入时延 + 局域网时延
  • 总延时 = 2 * 0.6 秒 + 数毫秒 + 数毫秒 < 1.4 秒

只有 60% 的对象需要利用到 Internet 。

四、条件 GET 方法

设置目的:证实缓存器中的对象是否为最新。

1)缓存器:在请求报文中包含对象的最后修改时间 If-modified-since:

2)服务器:如果对象是最新的,则响应报文中不包含对象 : HTTP/1.0 304 Not Modified

DJ2-2 Web 应用和 HTTP 协议_第12张图片

你可能感兴趣的:(计算机网络,http,网络协议,网络,学习)