计算机网络笔记No.5
Web
Web的构成
- 网页与网页相互连接的基础——每个网页对象拥有唯一的标识
- 网页(Web Page)包含多个对象(objects)
- 对象:HTML文件、JPEG图片、视频文件、动态脚本等
- 基本HTML文件:包含对其他对象引用的链接
- 对象的寻址(addressing)
- URL(Uniform Resoure Locator):统一资源定位器 RFC1738
- Scheme://host:port/path
- 网页(Web Page)包含多个对象(objects)
Web遵循的协议
万维网遵循的协议——超文本传输协议——HyperText Transfer Protocol(HTTP)
-
HTTP的结构——C/S结构
- 客户—Browser:请求、接收、展示Web对象
- 服务器—Web Server:响应客户的请求,发送对象
- 版本:1.0: RFC 1945、1.1: RFC 2068
-
HTTP的传输层协议——TCP
使用的顺序 -
HTTP协议是一个 无状态 协议
- 无状态(stateless)——服务器不维护任何有关客户端过去所发请求的信息
- 有状态的协议往往很复杂
HTTP的连接
HTTP连接的两种类型
-
非持久性连接(Nonpersistent HTTP)
- 每个TCP连接最多允许传输一个对象
- HTTP 1.0版本使用非持久性连接
-
持久性连接(Persistent HTTP)
- 每个TCP连接允许传输多个对象
- HTTP 1.1版本默认使用持久性连接
非持久性连接举例
- 假定用户在浏览器中输入URL:www.someSchool.edu/someDepartment/home.index
其中包含文本和指向10个jpeg图片的链接
- HTTP客户端向地址为www.someSchool.edu的服务器上的HTTP服务器进程(端口80) 发起TCP连接请求
- HTTP服务器在端口80等待TCP连接请求,接受连接并通知客户端
- HTTP客户端将HTTP请求消息(包含URL地址)通过TCP连接的套接字发出,消息中所含的URL表明客户端需要对象:someDepartment/home.index
- . HTTP服务器收到请求消息,解析,产生包含所需要对象的响应消息,并通过套接字发给客户端
- HTTP服务器 关闭TCP连接
- HTTP客户端收到响应消息,解 析html文件,显示html文件,发 现有10个指向jpeg对象的超连接
- 为每个jpeg对象重复步骤1-5
-
响应时间分析与建模
RTT(Round Trip Time)——从客户端发送一个很小的数据包到服务器并返回所经历的时间- 响应时间(Response time):
- 发起、建立TCP连接:1个RTT
- 发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT
- 响应消息中所含的文件/对象传输时间
Total=2RTT +文件发送时间
- 响应时间(Response time):
-
非持久性连接的问题
- 每个对象需要2个RTT
- 操作系统需要为每个TCP连接开销资源(overhead)
- 浏览器会打开多个并行的TCP连接以获取网页所需对象——服务器端会由很大负担
持久性连接
-
持久性连接特点
- 发送响应后,服务器保持TCP连接的打开
- 后续的HTTP消息可以通过这个连接发送
-
无流水(pipelining)的持久性连接
- 客户端只有收到前一个响应后才发送新的请求
- 每个被引用的对象耗时1个RTT
-
带有流水机制的持久性连接
- 客户端只要遇到一个引用对象就尽快发出请求
- 理想 情况下,收到所有的引用对象只需耗时约1个RTT
思考:这个程序如何实现?
HTTP消息的格式
HTTP协议有两类消息——请求消息(request)、响应消息(response)
-
请求消息举例:
GET /somedir/page.html HTTP/1.1 —— 请求行:请求命令 + URL + 版本
Host: www.someschool.edu —— 头部行 _ 主机地址
User-agent: Mozilla/4.0 —— 头部行 _ 浏览器类型
Connection: close —— 头部行 _ 连接
Accept-language:fr —— 头部行 _ 接收语言
HTTP请求消息的通用格式:
上传输入的方法:
- POST方法
网页经常需要填写表格(form)
在请求消息的消息体(entity body)中上传客户端的输入 - URL方法
使用GET方法——输入信息通过request行的URL字段上传
方法的类型:
-
响应消息举例:
HTTP/1.1 200 OK —— 状态行:版本 + 状态
Connection: close —— 头部行 _ 连接
Date: Thu, 06 Aug 1998 12:00:15 GMT —— 头部行 _ 外部服务器生成时间
Server: Apache/1.3.0 (Unix) —— 头部行 _ 软件服务
Last-Modified: Mon, 22 Jun 1998 …… —— 头部行 _ 上次修改时间
Content-Length: 6821 —— 头部行 _ 内容长度
Content-Type: text/html —— 头部行 _ 内容类型data data data data data …
HTTP响应状态代码:
体验一下HTTP:
- 利用telnet登录到某个Web服务器 telnet www.XXXX.cn 80
- 输入一个HTTP请求——GET /about/profile.htm HTTP/1.1、Host: www.XXXX.cn
- 查看HTTP服务器所返回的响应消息
Cookie技术
HTTP协议无状态会带来一些问题比如:很多应用需要服务器掌握客户端的——如网上购物
-
Cookie技术:
某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密) -
Cookie的组件:
- HTTP响应消息的cookie头部行
- HTTP请求消息的cookie头部行
- 保存在客户端主机上的cookie文件,由浏览器管理
- Web服务器端的后台数据库
-
Cookie能够用于:身份认证、购物车、推荐、Web e-mail
-
Cookie的问题:隐私问题
思考题:
- Cookie能够怎样被用于收集隐私?
- 能够收集哪些隐私?
- 你在上网的时候感觉到自己的隐私被严重侵犯吗?
Web缓存/代理服务器技术
Web缓存/代理服务器技术功能——在不访问服务器的前提下满足客户端的HTTP请求
- 为什么要发明这种技术:
- 缩短客户请求的响应时间
- 减少机构/组织的流量
- 在大范围内(Internet)实现有效的内容分发
过程:
- 用户设定浏览器通过缓存进行Web访问
- 浏览器向缓存/代理服务器发送所有的HTTP请求:
如果所请求对象在缓存中,缓存返回对象
否则,缓存服务器向原始服务器发送HTTP请求,获取对象,然后返回给客户端并保存该对象
- 缓存既充当客户端,也充当服务器,一般由 ISP(Internet服务提供商) 架设
Web缓存示例:
Web缓存更新问题 —— 缓存服务器上的数据和原始服务器一致吗?
- 解决方法:条件性GET方法
- 目标:
如果缓存有最新的版本,则不需要发送请求对象 - 缓存:
在HTTP请求消息中声明所持有版本的日期
If-modified-since: :如果这个日期之后服务器改动了就给缓存发回来 - 服务器:
如果缓存的版本是最新的,则响应消息中不包含对象
HTTP/1.0 304 Not Modified:没改动
—————————————————————————————————————————————
由于本人水平有限及时间仓促或疏忽大意以及其他的一些原因,文中难免会存在一些错误,如若有发现不正确的地方,还请大佬们评论或私信告之于我,以便及时纠错