cookie与web缓存

背景

HTTP的自身限制

  HTTP位于因特网协议栈顶层——应用层,基于传输层的TCP协议。应用程序可以借助套接字接口来使用TCP所提供的服务。分层体系结构的优势就是, HTTP协议主要负责接受请求与完成响应,它所接触到的也只有TCP提供的套接字接口,不必清楚请求端的状态。
  这也导致其无状态的性质,只要套接字接口传来HTTP请求,协议规定就要进行响应,哪怕短时间内重复请求同一对象,也是按部就班。


出现的方法

HTTP无状态的性质,出现的对应解决方法

1.cookie

服务器需要辨别用户身份、了解客户状态,希望响应内容与用户身份联系起来,因此引入cookie。
简要流程:

  1. 用户首次访问Web服务器时, 服务器就产生一个唯一的识别码,将其作为索引在服务器后端数据库中生成一个表项,用于记录用户的请求行为。此识别码会在HTTP响应中下发给用户。
  2. 用户浏览器接收到此响应,将其中的识别码提取,在本地cookie文件中存储此识别码与服务器主机名。
  3. 下一次,浏览器请求该Web服务器时,将与服务器对应的识别码嵌入请求报文中。Web服务器接收到该请求后,通过后端数据库记录就可以跟踪用户之前的行为记录。

  换句话说,cookie可以标识用户,在无状态的HTTP上建立一个用户会话层。

例如,购物网站登陆后,首页展示的推荐商品;付款时,不再需要重新输入地址信息等。

2.Web缓存

  Web缓存器也叫代理服务器。频繁多次请求服务器时,受限于不同物理链路带宽等因素影响,往返时延较长,将降低用户体验。
  Web缓存服务器有自己的磁盘缓存空间,在其存储空间中保存最近请求过的对象的副本。主打的还是存储器功能。
  Web缓存器常由ISP(互联网服务提供商)安装。例如,大学校园的校园网上安装一台Web缓存器,并将校园网内用户的浏览器配置指向它。
简要流程:

  1. 欲访问url,浏览器创建一个到Web缓存器的TCP连接,向Web缓存器的对象发送HTTP请求
  2. Web缓存器检查本地是否存在该请求对象副本,有则直接返回响应(该次命中,则降低时延);
    无则请求该对象的初始服务器,Web缓存器接收到初始服务器的响应后,在本地空间存储一份副本,并向客户浏览器发送该副本(下次命中,将降低时延)。

存在的问题是:缓存器中的对象副本可能过于陈旧,初始服务器的对象也许已经改变。

Web缓存改进——条件get方法

条件get方法即在 以get为方法的请求报文中包含关键字“If-Modified-Since:”, 允许Web缓存器去验证其保存的对象是最新的。执行对象为Web缓存器,若Web服务器的对象无修改,则返回的响应报文不包含请求对象,通知Web缓存器可以使用本地对象来响应用户浏览器。


分析

问题分析

  cookie是Web服务器用于标识用户,存放于用户端本地,可以提高用户的应用体验。但其安全性饱受争议,结合cookie和用户的账户信息,Web站点就可以获取用户的隐私信息。
  Web缓存,一方面减少用户请求的响应时间,另一方面,减少机构内网到公共网络的通信量。但存在的问题是:缓存器中的对象副本可能过于陈旧,初始服务器的对象也许已经改变。 因此又有了条件get方法。

总结

  由于HTTP是一种无状态协议,机械式的响应难免造成资源浪费、时延过高。无状态的服务器不能识别用户,Cookie来解决;无状态的服务器频繁请求,缓存机制解决。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值