目录
一、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 方法
1)网页(Web 页,或称文档)是由许多对象组成的。
2)对象就是文件,可以是 HTML 文件、JPEG 图像、Java applet、音频文件等。
3)多数网页由单个基本 HTML 文件和若干个所引用的对象构成。
4)每个对象被一个 URL(Uniform Resource Locator,统一资源定位符)寻址。
5)URL 举例:
这并不是真实的 OS 管理目录,而是由服务器管理的一个相对路径。假设服务器设置的根目录为 C:\root\,则路径为 C:\root\item\IZ*ONE\22884952 。
HTTP:hypertext transfer protocol,超文本传输协议
1)是 Web 的应用层协议
2)采用 C/S 模式
应用程序的体系结构
3)具体协议
1)HTTP 使用 TCP 的服务
Browser(HTTP client,HTTP 客户)和 Web 服务器(HTTP server,HTTP 服务器)
2)HTTP 是无状态协议
HTTP 服务器不维护客户先前的状态信息。
即,每一对请求和响应之间都是相互独立的。
维护状态的协议非常复杂!
- 必须维护过去历史(状态信息)
- 如果 C 或 S 崩溃,则它们各自的状态视图可能不一致,因此必须保持协调一致
非持久 HTTP 连接 | 持久 HTTP 连接 | |
---|---|---|
特点 | 每个 TCP 连接上只传送一个对象,下载多个对象需要建立多个 TCP 连接。 |
一个 TCP 连接上可以传送多个对象。 |
应用 | HTTP/1.0 使用非持久 HTTP 连接。 | HTTP/1.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 连接,发送请求,等待响应。这是一个并发的过程。
往返时间 RTT:一个短分组从客户主机到服务器再到客户主机所花费的时间。
Round-Trip Time
三次握手:
三次握手中前两个部分所耗费的时间占用了一个 RTT 。完成了三次握手的前两个部分后,客户 结合三次握手的第三部分 向该 TCP 连接发送一个 HTTP 请求报文。一旦该请求报文到达服务器,服务器就在该 TCP 连接上发送 HTML 文件。该 HTTP 请求/响应用去了另一个 RTT 。
响应时间:2RTT + transmit time
我们暂且忽略文件分组的大小,即以文件的第一个 bit 的到达时刻为传输完毕时刻。那么,从建立 TCP 连接到获得包含 HTML 文件的响应信息,一共需要:2 个 RTT 。
随后,我们需要分别对 10 个引用 JPEG 对象重复步骤 1~5 :建立 TCP 连接 + HTTP 请求/响应。由于是并发执行的,因此需要花费时间:2 个 RTT 。
最终,我们一共需要花费时间:4 个 RTT 。
不带流水线的持久 HTTP 连接
带流水线的持久 HTTP 连接
假设需要 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 |
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 //中文版本
(额外的 回车换行)
设计特点:
cr 为回车,lf 为换行。
HTTP/1.0 | HTTP/1.1 |
---|---|
|
|
上载表单的方法
1)Post 方法
2)URL 方法
www.somesite.com/animalsearch?monkeys&banana
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 ...
位于服务器响应客户的响应消息的第一行,几个常见的样本状态码如下。
状态码 | 含义 |
---|---|
200 OK | 请求成功,所请求信息在响应消息中返回。 |
301 Moved Permanently | 所请求的对象已永久迁移,新的 URL 在本响应消息的(location:)头部指出。 |
400 Bad Request | 该请求不能被服务器解读。 |
404 Not Found | 服务器上不存在所请求文档。 |
505 HTTP Version Not Supported |
让无状态技术 HTTP 拥有有状态能力。
1)味噌丸总是使用同一台 PC 访问 Internet;
2)TA 首次访问 1 个电子商务网站;
3)当 TA 最初发出 HTTP 请求访问该站点时,该站点为 TA 创建一个唯一的 ID,并在后端数据库创建一个响应于该 ID 的表项。
key word:唯一性标识;自我声明。
Cookies 的 4 个重要方面
Cookies 和隐私
设置目的:代表起始服务器满足 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 响应报文发送该副本。
关系描述如下:
1)Web 缓存器既是客户机的服务器,又是起始服务器的客户机。
2)典型的 Web 缓存器由大学、公司或居民 ISP 提供。
1)减少对客户机请求的响应时间
2)减少内部网络与接入链路上的通信量
3)能从整体上大大降低因特网上的 Web 流量
1)情况一
假设
流量强度不是作为时延直接参与计算的,它只是能反映出时延的量级。流量强度趋于 1 也不代表排队一辈子,只是说明时延的量级是分钟级了,确实要花费很长时间。
结论
2)情况二
Q:Web 缓存器是转发了客户的 HTTP 请求,还是自己写了一份 HTTP 请求。可能的解决方法
结论
缺点
3)情况三
可能的解决方法
结论
只有 60% 的对象需要利用到 Internet 。
设置目的:证实缓存器中的对象是否为最新。
1)缓存器:在请求报文中包含对象的最后修改时间 If-modified-since:
2)服务器:如果对象是最新的,则响应报文中不包含对象 : HTTP/1.0 304 Not Modified