一个模拟304机制的方法——针对一次超大数据的post请求

场景:

      post拉取一个超大的数据,比如通讯录等。


       为了避免每次都要请求都要拉取超大数据,我们可以在第一次请求后,把这份超大数据本地存储起来,下一次时,如果判断本地数据没有失效,就直接使用本地数据,而不用服务端传递庞大数据了,这样就在一定程度上缩短了http传递数据的时间了。这里的要点就是判断数据是否失效的机制。流程图不太好画,就用伪码吧。


这里使用了nodejs作为中间过渡层,大概的流程如下:

A:客户端设置headers["cache-flag"]=1给nodejs;

B:nodejs返回大数据Data给客户端

C:nodejs返回heades["cache-md5"] ="xxxx"给客户端

D:客户端本地存储大数据Data

E:客户端本地存储headers.cache-md5的值xxxx

F:客户端设置headers["cache-flag"]=1,并且从本地存储中拿到xxxx设置headers["cache-md5"]="xxxx"给nodejs

G:nodejs返回headers["cache-target"]=1给客户端

H:nodejs返回headers["cache-md5"]="newxxxx"给客户端

I:客户端使用本地存储的Data



具体的解释:

1、客户端:如果要使用缓存机制,在发请求的时候,设置一个请求头headers["cahce-flag"]=1;

2、nodeJs:(每次还是会请求底层服务端拿到数据),判断请求头有没有cache-flag,如果没有直接把从底层服务端拿到的数据返回给客户端;如果有cache-flag标志,再判断有没有headers["cache-md5"],如果没有,统一直接返回数据,如果有,则把nodejs拿到的数据打一个md5值newxxx",并且和请求的headers.cache-md5的值xxx相比较,如不相等,则说明过期,直接返回大数据,同时设置响应头,headers["cache-md5"]="newxxx";如果相等,说明没有过期,则把content-length设置为0,responseText设置为空,同时返回两个头部给客户端,headers["cache-target"] =1;headers["cache-md5"]="xxx"

3、客户端判断每次都会存储大数据data(如果有的话),也会每次存储nodejs返回的cache-md5,并且每次还会把这个cache-md5传递给nodejs,当客户端判断有header["cahce-target"],如果有,则说明缓存没有失效,则使用本地缓存。




感觉描述的有点啰嗦而且没有说清楚,还是整理一下画一个流程图吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值