一、万维网(World Wide WEb,www)
-
网页(Web Page):包含多个对象(objects)。
-
对象:HTML文件、JPEG图片、视频文件、动态脚本等
-
基本HTML文件:包含对其他对象引用的链接
-
对象的寻址:URL(Uniform Resource Locator,统一资源定位器) RFC
Scheme://host:port/path
-
-
网页之间互相链接
二、HTTP协议(HyperText Transfer Protocol,超文本传输协议)
-
客户-Browser:轻轻、接收、展示Web对象
服务器-Web Server:响应客户的请求,发送对象
-
使用TCP传输服务
-
无状态:服务器不维护任何有关客户端过去所发请求的信息。
三、HTTP连接
1. 非持久性连接(Nonpersistent HTTP)
- 每个TCP连接最多允许传输一个对象
- HTTP 1.0版本使用非持久性连接
响应时间分析与建模
- RTT(Round Trip Time):从客户端发送一个很小的数据包到服务器并返回所经历的时间
- 响应时间(Response time)
-
- 发起、建立TCP连接:1个RRT
- 发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RRT
- 响应消息中所含的文件/对象传输时间
- TOTAL = 2RRT + 文件发送时间
非持久性连接的问题
- 每个对象需要2个RRT
- 操作系统需要为每个TCP连接开销资源
- 浏览器:打开多个并行的TCP连接以获取网页所需对象,给服务器带来巨大开销
2. 持久性连接(Persistent HTTP)
- 每个TCP连接允许传输多个对象
- HTTP1.1版本默认使用持久性连接
过程:
- 发送响应后,服务器保持TCP连接的打开
- 后续的HTTP消息可以通过这个连接发送
无流水(pipelining)的持久性连接
- 客户端只有收到前一个响应后才发送新的请求
- 每个被引用的对象耗时1个RTT
带有流水机制的持久性连接
- HTTP1.1的默认选项
- 客户端只要遇到一个引用对象就尽快发出请求
- 理想情况下,收到所有的引用对象只需耗时1个RTT
四、HTTP消息格式
1. 请求消息(request)
-
ASCII:人直接可读
-
格式:
request line(GET,POST,HEAD,commands)
header lines
上传输入的方法
1. POST方法
- 网页经常需要填写表格(form)
- 在请求消息的消息体(entity body)中上传客户端的输入
2. URL方法
- 使用GET方法
- 输入信息通过request行的URL字段上传
方法的类型
HTTP/1.0
- GET
- POST
- HEAD:请Server不要所请求的对象放入响应消息中
HTTP/1.1
- GET, POST, HEAD
- PUT:将消息体中的文件上传到URL所指定的路径
- DELETE:删除URL字段所指定的文件
2. 响应消息
-
status lines (protocol. status code, status phrase)
header lines
-
HTTP响应状态代码:响应消息的第一行
如404 Not Found,200 OK,505 HTTP Not Supported。
五、Cookie技术
1. 为什么需要Cookie?
- HTTP协议无状态
- 很多应用需要服务器掌握客户端的状态,如网上购物
2. Cookie技术:
-
某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常通过加密)
-
RFC6265
3. Cookie的组件
- HTTP响应消息的cookie头部行
- HTTP请求消息的cookie头部行
- 保存在客户端主机上的cookie文件,由浏览器管理
- Web服务器端的后台数据库
4. cookie的作用
- 身份认证、购物车、推荐、WebEmail …
- 问题:隐私问题
六、Web缓存/代理服务器技术
功能:在不访问服务器的前提下满足客户端的HTTP请求
为什么要发明这种技术?
- 缩短客户请求的响应时间
- 减少机构/组织的流量
- 在大范围内(Internet)实现有效的内容分发
Web缓存/代理服务器
- 用户设定浏览器通过缓存进行Web访问
- 浏览器向缓存/代理服务器发送所有的HTTP请求
-
- 如果所请求对象在缓存中,缓存返回对象
- 否则,缓存服务器向原始服务器发送HTTP请求,获取对象,然后返回给客户端并保存该对象
- 缓存既充当客户端,又充当服务器
- 一般由**ISP(Internet服务提供商)**架设
条件性GET方法
目标:如果缓存由最新的版本,则不需要发送请求对象
缓存:在HTTP请求消息中声明所持有版本的日期
服务器:如果缓存的版本是最新的,则响应消息中不包含对象