前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >If-None-Match 在刷票软件中的应用

If-None-Match 在刷票软件中的应用

作者头像
poslua
发布2019-08-19 14:55:15
9780
发布2019-08-19 14:55:15
举报
文章被收录于专栏:posluaposlua

优化系统的极限就是不发送任何请求,这一点通常使用缓存来实现。例如,在一些流量非常大 WEB 的系统中,我们通常会在源站前面启用 CDN。这样用户直接访问的是 CDN 中的缓存内容,降低真实服务端的压力。

同样服务端在输出响应时,可以通过响应头输出一些与缓存有关的信息,从而达到少发或不发请求的目的。

例如,服务端可以通过响应头里的 Last-Modified(最后修改时间) 或者 ETag(内容特征) 标记实体。浏览器会存下这些标记,并在下次请求时带上 If-Modified-Since: 上次 Last-Modified 的内容或 If-None-Match: 上次 ETag 的内容,询问服务端资源是否过期。如果服务端发现并没有过期,直接返回一个状态码为 304、正文为空的响应,告知浏览器使用本地缓存;如果资源有更新,服务端返回状态码 200、新的 Last-ModifiedEtag 和正文。

这样就解释了为什么我们在刷票的时候,明明看到有票,但是却无法下单(实际上已经没票了,你看到的只是缓存信息)。所以如何绕过 CDN 拿到余票的最新信息,成为了抢票成功与否的关键。有一些刷票软件开辟了个新的思路:通过伪造 If-None-Match 头来跳过 CDN 缓存,尽快获取源站的最新数据。

If-None-Match 是一个条件式请求首部,对应校验的源站头部为 ETag,当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中所列出的相匹配的时候,才会对请求进行相应的处理(有文件则响应200),如果匹配会直接给304(文件没有修改)。如果源站也没有 ETag这个头,这样 CDN 的缓存文件也没法校验这个头信息,当终端发起的请求中带这个头信息时,CDN 会将这样的请求回源去校验

分析完了原理,屏蔽这些刷票软件也变得非常简单:就是在 CDN 上配置策略,删掉 If-None-MatchIf-None-Match 这些请求头,再进行后续的处理。实际上拦截效果也非常好:


参考文献

  • Nginx 配置之性能篇
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 poslua 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档