计算机网络-自顶向下-Web应用2(Cookie、Web缓存、条件GET详解)

Web应用2

计算机网络所有笔记链接

Cookie技术

前面提到HTTP的服务是 无状态的,这简化了服务器的设计,但是Web站点还是很有必要具有能够识别用户的功能的。比如说你至少能够把我密码啥的记录了吧,我总不能访问一次就要重新输入密码吧,因此就有了Cookie技术。Cookie技术的四个组件:

  1. 在HTTP的 响应报文中的一个Cookie首部行
  2. 在HTTP的 请求报文中的一个Cookie首部行
  3. 用户端系统(也就是浏览器)中保留一个Cookie文件
  4. 位于Web站点的一个后端数据库

通过一个示例简单说明一下

计算机网络-自顶向下-Web应用2(Cookie、Web缓存、条件GET详解)_第1张图片

假定用户Susan使用网络访问Amazon.com,假定她过去访问过ebay站点

  1. 她发送了一个普通的HTTP请求报文到服务器,该Web站点就要产生了一个 唯一的标识码,并且作为后端数据库的一个表项(就是你可以通过这个标识码索引数据库中存储的你的一些内容什么的啦)
  2. 接下来Web服务器用一个包含 **Set-Cookie:**首部的HTTP响应报文对Susan的浏览器进行响应,其中Set-Cookie:首部含有这个识别码1678 ,那么浏览器就要记住它:在管理的Cookie文件中添加 服务器主机名和Set-Cookie:首部中的识别码,在访问那个服务器主机的时候就可以直接发送Cookie让服务器知道是你这个家伙
  3. 因为Susan访问过这个站点了,所以在此访问的时候浏览器就会查询一下Cookie文件中当时访问该网站对应的识别码是啥子,然后就放到HTTP请求报文中去。那我服务器再接受到请求报文后一看(通过识别请求报文中的Cookie对应的标示码):哇偶,原来是你这个家伙又来了!
  4. 服务器已经认出你来了,那就赶紧通过标识码看看数据库中存储的以前你做过的痕迹,比如说你在购物车放了啥东西啊什么的就显示出来再发给你。
  5. 一星期后Susan再次访问该网站,当然服务器还是通过Cookie认出你这个家伙了,不仅认出你来了,还通过数据库中你的访问数据通过一些技术给你推荐商品。比如说你购物车全是零食(吃货无疑了),那服务器肯定会给你推荐零食的…

上述就是Cookie技术的简要描述了,确实非常滴好用,我们访问一些站点的时候就不需要再重复的输入姓名啊密码啊啥的,但是这确实也是一种隐患。你所有的用户隐私都会被服务器给记录下来的,有一些公司就会将信息卖给第三方的公司,是谁我就不提了吧鹅鹅鹅鹅鹅鹅…

Cookie的作用

  • 身份认证
  • 购物车
  • 推荐
  • Web e-mail

Web缓存

Web缓存器也叫做 代理服务器,Web缓存器有着自己的磁盘存储空间,并且在存储空间中保存 最近请求过的对象的副本

计算机网络-自顶向下-Web应用2(Cookie、Web缓存、条件GET详解)_第2张图片

假定浏览器正在访问http://www.someschool.edu/campus.gif

  1. 浏览器创建一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个THHP请求
  2. 那我Web缓存器就要检查一下,我的本地是不是存储过你要请求的对象的副本,如果有的话就不用再向origin server申请了,直接将副本通过HTTP响应报文返回该对象
  3. 如果没有这个对象的话,它就打开一个与origin server的TCP连接。此时Web缓存器就成为了客户了,向origin server发送报文请求,然后origin server将对象发送给Web缓存器
  4. 当Web缓存器接受到对象之后,就会在本地存储空间存储一份副本,然后向客户的浏览器用 HTTP响应报文发送这个副本

Web缓存器通常由ISP购买并且安装,例如大学可能在校园网上安装一台缓存器。

那么Web缓存器有什么好处值得让我们使用呢?

  1. Web缓存器可以大大减少对于客户端请求的响应时间,尤其是当客户与origin server之间的瓶颈带宽远低于客户与代理服务器之间的瓶颈带宽
  2. Web缓存器能够大大减少一个机构的接入链路到因特网的通信量。通过减少通信量,这个机构就不必急于增加带宽,从而降低了费用

样例演示

题目背景就是P73页(绝对不是因为我懒得打字了)或者看一下hit-networking

总的响应时间: 从浏览器请求一个对象到接收到该对象的总时间,是局域网时延、接入时延、和因特网时延之和
局 域 网 上 的 流 量 强 度 : ( 15 个 请 求 / s ) ∗ ( 1 M b / 请 求 ) / ( 100 M b p s ) = 0.15 局域网上的流量强度:(15个请求/s) * (1Mb/请求) / (100Mbps) = 0.15 (15/s)(1Mb/)/(100Mbps)=0.15

链 路 上 的 流 量 强 度 : ( 15 个 请 求 / s ) ∗ ( 1 M b / 请 求 ) / 15 M p b s = 1 链路上的流量强度:(15个请求/s) * (1Mb/请求) / 15Mpbs = 1 (15/s)(1Mb/)/15Mpbs=1

流量强度如果达到了1就是不能够接受的程度了,链路上面的时延就回变得非常大并且无限增长

那么能否通过增加带宽(15Mpbs) - > (100Mbps)呢? 太贵了

另一种方式:增设Web缓存器,实践中的 命中率(就是一个缓存器满足请求而不用通过origin sever的比率)是0.4,就是40%的请求不需要通过origin server进行响应,因此只有60%的请求会被接入链路。那么链路上面的流量强度从 1.0 - > 0.6,看似数字不起眼,其实降低了非常多的时延

最终的平均时延:
0.4 ∗ ( 0.010 秒 ) + 0.6 ∗ ( 2.01 秒 ) 0.4 * (0.010秒) + 0.6 * (2.01秒) 0.4(0.010)+0.6(2.01)

条件GET方法

问题:假设我每天都会请求看一下新闻,我的缓存服务器一看:哦,你又要看新闻,那我就把之前缓存的新闻给你看吧,然后就将昨天的发过来了…

这显然不是我们想要的对吧,因此我们就可以用条件GET来判断一下你缓存的是不是最新版本的,还记得HTTP报文格式中的last modified吗, 就是最近一次的修改日期。我们可以让缓存服务器发送一条比对 我缓存的内容和你的版本是否是一致的(万一我昨天缓存的,你今天版本更新了,那我不能给客户发旧版的吧),因此就发送了一条 条件GET方法比对一下时间,如果是最新版本的就直接发送给用户了,如果不是那就更新一下再给用户

请求条件GET的格式:

  • 请求报文使用GET方法
  • 请求报文中包含”If-Modified-Since:“首部行

如果origin server返回的是304 Not Modified,那么就代表缓存服务器中的是最新版的

计算机网络-自顶向下-Web应用2(Cookie、Web缓存、条件GET详解)_第3张图片

你可能感兴趣的:(前端,缓存,服务器,计算机网络,Cookie)