目录
1. Web 和 HTTP 常用术语
2. HTTP 概述
3. TCP 和 HTTP
4. HTTP 连接
非持久 HTTP 连接
响应时间模型
持久 HTTP 连接
计算 TCP 和 RTT 举例
5. HTTP 请求报文格式
方法类型
上载表单的方法
6. HTTP 响应报文格式
HTTP 响应的状态码
7. Cookies:跟踪用户
1)网页(Web页,或称文档)由许多对象组成。
2)对象就是文件,可以是 HTML 文件、JPEG 图像、Java applet、音频文件等。
HTML 文件是最基本的对象,是一个网页的框架。
3)多数网页由单个基本 HTML 文件和若干个所引用的对象构成。
4)每个对象被一个 URL(Uniform Resource Locator,统一资源定位符)寻址。
URL 是唯一的文件定位方式;网址(URL)指向的是 HTML 文件,HTML 文件里又有各个对象的 URL 。
5)举例 URL:
默认的端口号是 80,若想更改则可写成:主机名:端口号。
Web 服务器监听的是 80 端口。
主机名和 IP 地址之间是互为映射的关系。
路径名用于指示文件是在主机的哪个目录下。这并不是真实的 OS 管理目录,而是由服务器管理的一个相对路径。假设服务器设置的根目录为 C:\root\,则路径为 C:\root\item\IZ*ONE\22884952 。
HTTP:hypertext transfer protocol,超文本传输协议。
1)是 Web 的应用层协议
2)采用 client/server 模式
3)具体协议
1)HTTP 使用 TCP 服务
Browser(HTTP client,HTTP 客户)和 Web 服务器(HTTP server,HTTP 服务器)
2)HTTP 是无状态协议
HTTP 服务器不维护客户先前的状态信息。
即,每一对请求和响应之间都是相互独立的。
维护状态的协议非常复杂!
1)必须维护过去历史(状态信息)。
2)如果 server/client 崩溃,它们各自的状态视图可能不一致,因此必须保持协调一致。
非持久 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):1 个小分组从客户主机到服务器再到客户主机所花费的时间。
响应时间 total = 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 方法
使用 GET 方法
针对少量的表单输入
表单(各字段)输入值作为 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 和隐私