Web
World Wide Web: Tim Berners-Lee
网页包含多个对象:
对象:HTML文件、JPEG图片、视频文件、动态脚本等
- 基本HTML文件:包含对其他对象引用的链接
对象的寻址——URL:统一资源定位器
HTTP协议概述
- 万维网应用遵循什么协议:超文本传输协议HTTP
- C/S结构
- 客户——browser:请求、接收、展示Web对象
- 服务器——Web Server:响应客户的请求,发送对象
- HTTP版本:1.0、1.1
- 使用TCP传输服务
- 无状态——服务器不维护任何有关客户端过去所发请求的信息(服务器端不记录历史信息)
为什么选用无状态机制?
有状态的协议更复杂:
- 需维护状态(历史信息)
- 如果客户或服务器失效,会产生状态不一致,解决这种不一致代价高
HTTP连接的两种类型
非持久性连接
每个TCP连接最多允许传输一个对象
RTT:从客户端发送一个很小的数据包到服务器并返回所经历的时间
响应时间:发起建立TCP连接(1个RTT)→发送HTTP请求消息到响应消息到达(1个RTT)→响应消息中所含文件/对象传输
total = 2RTT + 文件发送时间
持久性连接
非持久性连接的问题
- 每个对象需要2个RTT
- 操作系统需要为每个TCP连接开销资源
发送响应后,服务器保持TCP连接的打开,后续的HTTP消息可以通过这个连接发送
分两类
- 无流水的持久性连接:
- 客户端只有收到前一个响应后才发送更新的请求
- 每个被引用的对象耗时1个RTT(不用发起、建立TCP连接)
- 带有流水机制的持久性连接
- 客户端只要遇到一个引用对象就尽快发出请求
- 理想情况下,收到所有的引用对象只需约1个RTT
HTTP消息格式
请求消息
- ASCII:人直接可读
- 格式:
请求行 request行
头部行(声明连接主机;浏览器类型;语言等
空行(表结束
请求消息还需要携带数据吗?
需要。登录账号密码等。上传输入方法:
- POST方法:网页需要填写表格;在请求消息的消息体中上传客户端的输入。
- URL方法(使用GET方法):输入信息通过request行的URL字段上传。
方法的类型
- HTTP/1.0
- GET
- POST
- HEAD:请server不要将所请求的对象放入响应消息中(用于测试)
- HTTP/1.1
- GET, POST , HEAD
- PUT:将消息体中的文件上传到URL字段所指定的路径
- DELETE:删除URL字段所指定的文件
响应消息
- ASCII:人直接可读
- 格式:
Status line
响应状态代码:
Header lines
Data
Cookie技术
为什么需要Cookie?
HTTP协议无状态,但是很多应用需要服务器掌握客户端的状态,如网上购物。
Cookie技术:某些网站为了辨别用户身份、进行session(会话)跟踪存储在用户本地终端上的数据(通常经过加密)。
Cookie组件:HTTP响应消息的cookie头部行;HTTP请求消息cookie头部行;客户端主机上的cookie文件,由浏览器管理;服务器端后台数据库。
Cookie的原理
发起普通的HTTP请求,server为新用户创建一个唯一的ID,存入数据库,响应消息中set-cookie,保存在客户端cookie文件中;
下次该用户再发起请求时,会进行特殊动作(cookie-specific action,针对特定用户)。
Cookie的作用
- 身份认证
- 购物车
- 推荐
- Web e-mail
存在隐私问题!!
Web缓存/代理服务器技术
功能:在不访问服务器的前提下满足客户端的HTTP请求。
为什么要这项技术?——性能优化技术,而不是为了扩展功能。
- 缩短客户请求响应时间
- 减少机构/组织的流量
- 在大范围内实现有效的内容分发
原理:
用户设定浏览器通过缓存进行Web访问,浏览器向缓存/代理服务器发送所有的HTTP请求;
如果所请求对象在缓存中,返回缓存对象;
否则,缓存服务器向原始服务器发送HTTP请求,获取对象,然后返回给客户端并保存该对象.
缓存既充当客户端,也充当服务器.
一般由ISP(Internet服务提供商)架设.
缓存服务器中的缓存如何确保与原始服务器一致?
条件性GET方法.(请求消息中上传输入的一种方法)
- 目标:如果缓存有最新的版本,则不需要发送请求对象
- 缓存:在HTTP请求消息中声明所持有版本的日期
If-modified-since:<data> (条件GET)
从缓存日期以来是否有改变
- 服务器:如果缓存的版本是最新的,则响应消息中不包含对象
HTTP/1.0 304 Not Modified
响应无改变,数据中没有对象传输