#Web与HTTP
World Wide Web:Tim Berners-Lee
网页(Web Page)包含多个对象(Objects)
对象:HTML文件,JPEG图片,视频文件,动态脚本等
基本HTML文件:包含对其他对象的引用连接
对象寻址(addressing)
URL(Uniform Resource Locator):统一资源定位器(RFC1738)
例:Scheme://host:port/path
(Http://)www.someschool.edu/somedept/pic.gif
HTTP协议概述
超文本传输协议:Hyper Text Transfer Protocol
C/S传输结构
客户-Browser:请求,接收,展示Web对象。
服务器-WebServer:响应客户的请求并发送对象。
TCP传输服务
服务器使用80端口等待客户请求
浏览器发起到服务器的TCP连接(创建套接字Socket)
服务器接收来着浏览器的TCP连接
浏览器(HTTP客户端)与Web服务器(HTTP服务端)交换HTTP消息
关闭TCP连接
无状态(Stateless)
服务器不维护任何有关客户端过去发送的消息
有状态的协议更加复杂:
要维护历史状态
如果客户或服务器失效会产生状态的不一致,解决这种不一致代价极高
#HTTP连接
HTTP连接的两种类型
非持久性连接
每个TCP连接最多只允许传输一个对象
HTTP1.0版本使用非持久性连接
使用非持久性连接要传输复数对象时要不断重复申请TCP连接
持久性连接
每个TCP连接允许传输多个对象
HTTP1.1版本默认使用持久性连接
响应时间
RTT(Round Trip Time)
从客户端发送一个很小的数据包到服务器并返回所经历的时间
响应时间的建模
1.发起建立TCP连接的请求——1个RTT
2.发送HTTP请求消息等待HTTP响应消息的前几个字节到达——1个RTT
3.响应中所含文件的传输时间
*Total=2*RTT+文件发送时间
持久性HTTP
非持久性连接的问题
每个对象需要2个RTT
操作系统需要为每个TCP开销资源(Overhead)
浏览器会打开多个并行的TCP连接以获取所需对象
给服务器端造成严重负担
持久性连接
发送响应后服务器保持TCP连接的打开
后序HTTP消息可以通过这个连接发送
无流水(Pipelining)的持久性连接
客户端只有收到前一个响应后才发送新的请求
每个引用对象消耗1个RTT
带有流水机制的持久性连接
HTTP1.1的默认选项
客户端只要发现一个引用的对象就尽快发出请求
理想情况下收到所有引用对象只要耗时约1个RTT
#HTTP消息格式
HTTP有两种消息
请求消息(Request) 响应消息(Response)
ASCII:人可直读
请求消息通用格式
在此附上HTTP请求消息通用格式以及本人笔记
上传输入的方法
POST方法
网页经常需要填写表格(form)
在请求消息信息体中上传客户端的输入
URL方法
使用GET方法
输入信息通过request行的URL字段上传
方法的类型
HTTP/1.0
GET
POST
HEAD:请server不要将所请求的对象放入响应消息中
HTTP/1.1
GET POST HEAD
PUT:将消息中的文件上传到URL字段所指定的路径
DELETE:删除URL字段所指定的文件
HTTP响应消息
在此附上HTTP响应消息通例子以及本人笔记
响应消息的第一行示例
200 OK
301 Moved Permantly
404 Not Found
505 HTTP Version Not Supported
400 Bad Request
#Cookie技术
为什么要使用Cookie技术
HTTP协议无状态
很多应用需要服务器掌握客户端的状态
某些网站为了辨别用户身份进行了Session跟踪储存在客户本地终端上的数据(通常加密)
RFC6265
Cookie的组件
HTTP响应消息的Cookie头部行
HTTP请求消息的Cookie头部行
保存在客户端主机上的Cookie文件,由浏览器管理
Web服务器端的后台数据库
Cookie原理
Cookie的作用
身份认证 购物车 数据推送 Web mail....
隐私问题
因为Cookie时刻掌握客户端状态,所以会引发隐私问题
#Web缓存/代理服务器技术
功能
在不访问服务器的前提下满足客户端的HTTP请求
为什么发明这种技术
缩短客户请求的响应时间
减少机构/组织的流量
在大范围内(interne)实现有效内容的分发——SDN分发网络
Web缓存/代理服务器
用户设定浏览器通过缓存进行Web访问
浏览器向缓存/代理服务器发送所有的HTTP请求
如果所请求对象在缓存中,缓存返回对象
否则缓存服务器向原始服务器发送HTTP请求获取对象后返回并保存该对象
缓存即充当客户端也充当服务器
一般由ISP(Internet)服务提供架设
Web缓存实例
上面三张图第一张是一个机构连接Web网络的示意图
因为低一张对Web资源的使用不合理会产生高时延问题所以图2增加了带宽来解决问题
但增加带宽的方法成本过高,所以图3使用了增设了代理服务器,轻易的就解决了问题优化了架构
条件性GET方法
我们已经知道Web缓存的好处,但如何确保缓存中所有对象数据都保持“最新”呢?
目标
如果缓存有最新版本则不需要发送请求对象
缓存
在请求消息中声明所持有版本的日期
If modified - since:<data>
服务器
如果缓存的版本是最新的则响应消息中不包含对象;
HTTP/1.0 304 Not Modified(没改变,已最新)