低成本打造一个带宽无限的网站(二)

网站攻击

有次在讨论网站防护时,提到一个信息发布的站点 —— 它的结构很简单,只有几个页面而已,正常情况下打开是非常快的。然而一到关键时刻,流量如同洪水般涌来。网站无法访问,那些付费发布的信息就错过最佳展现时间了。

对于网站攻击,现成的解决方案有很多,例如用上 WAF、CDN 等服务,多少能分担一些。不过,通用的防御方案,自然就有通用的攻击方案。

例如通过 DNS 实现的负载均衡,攻击者使用现成的工具,就能轻易遍历出对应的 IP。更糟的是,有时域名会缓存很久,使得攻击都快结束了解析还没生效。

对于前端爱好者来说,这种传统的方案一点都不 Geek —— 理想的防护,显然应该从前后端同时入手。

提到前端,也许你会觉得奇怪,网站都被打垮了,还哪来的前端?别急。我们先来思考个本质问题:为什么网站容易垮。

相比网页,传统的应用程序在网络不好的情况下,表现的更为强劲。例如一些网络视频播放器,即使没连网也能启动,只是不能观看在线视频而已,但仍可作为普通播放器使用;而网页版的视频站点,显然就没这么强大了,如果没连网,连基本界面都看不到。

这个道理大家都懂。因为应用程序是事先下载到本地的,所以后期运行时,界面、程序可以直接启动,只有信息才依赖网络;而网页的界面、程序、信息,很多时候是混在一起的,每次都得实时传输。所以极端情况下,网页表现得更为脆弱。

改进

因此,我们需要对网页做一些改造,将「界面、程序」和「信息」彻底分离。

  • 前者通常较少变动,因此可对相应的资源设置 强缓存。强缓存是不走流量、直接从本地读取的,所以用户只要访问过一次,之后界面就可以瞬间展现、程序可以立即运行 —— 无论网站是否繁忙!
  • 后者是动态加载的数据,存放位置并没有限制,因此可放在多个后备站点上 —— 无论自己的站点,还是免费空间。

当基本界面展现后,程序通过 AJAX 从外部站点获取信息,然后填充到页面里。如果获取失败,则尝试后备列表 —— 除非所有站点都垮了,否则只要有一个活着,信息仍能展示!

有了这样的机制,就能降低网站故障的影响了。除了没有缓存的「新用户」无法打开网站,那些曾经访问过的回头客,仍可正常浏览!

再改进

更进一步,只要不是服务崩溃、流量被封那种硬故障,我们还可继续优化,使新用户也有机会访问。

在带宽吃紧的情况下,我们需要对「界面和程序」进行精简,使其只需极小的传输流量,从而能在夹缝中求生。

那么,这究竟能精简到多小?事实上,只需一行 HTML 就够了:

<script src=//free-host-n/boot.js></script>

我们可让网站所有的界面和功能,都由一个外部脚本来创建。这样,整个站点只需一个几十字节的页面,仅仅作为启动器而已!

尽管最终 99.99% 的流量都来自其他站点,但浏览器的地址栏,显示的仍是当前站点:)

现在,只要带宽还有一丝残喘的余地,新用户就有机会获取到这个迷你启动页,进而从互联网上各个节点加载出完整内容!

由于整个站点只承载一个极小的文件,因此防御策略可以简单很多。此外,外部脚本的路径可通过后端工具随时改变,用以避开速度缓慢的节点 —— 毕竟 HTTP 控制缓存的能力,比 DNS 丰富多了!

缺陷

当然,这个方案似乎过于激进 —— 不仅需要对业务做大量改造,而且对搜索引擎也不利,因此最终并没有实际应用。

此外,还有一个大问题也未能解决:用户刷新页面,会导致强缓存失效,从而产生网络请求。如果此时网站挂了,那么用户刷新后,不是长时间等待,就是直接显示错误。

如此美妙的防御方案,最终却防不住 F5 按钮。。。这个问题,直到 HTML5 时代的一项新科技才能解决 —— 应用缓存。

应用缓存

关于应用缓存,熟悉前端的小伙伴们都不陌生,它正是为提高 WebApp 的体验而设计。

应用缓存的用法很简单,通过一个列表清单,告诉浏览器预先缓存哪些资源:

<html manifest="list.appcache">

之后访问列表中的资源时,浏览器就直接从本地读取。相比强缓存,应用缓存的离线程度更高 —— 不仅没连网也能访问,甚至还可以刷新!

缓存不耐刷的问题,总算是能解决了。只是此时兴致已过,并没有去尝试改进。对于浏览器缓存,当时觉得更好玩的还是攻击方面 —— 中间人和前端脚本相互结合,批量污染缓存。有兴趣的可以看之前写的流量劫持相关文章。

也许正是因为易受中间人污染,以及 不够灵活 等原因,应用缓存始终存在一些争议,以至于后来被 Web 标准废弃了。取而代之的,则是一个更逆天的标准。。。

下一篇

时间: 2024-08-04 05:49:40

低成本打造一个带宽无限的网站(二)的相关文章

低成本打造一个带宽无限的网站(五)

突破限制 由于 SW 非常强大,因此使用条件也是非常严格的,以免被恶意使用. 例如 SW 必须在 HTTPS 站点上使用.这本是件好事,彻底杜绝了中间人的隐患,但现在却成了一道门槛 -- 毕竟支持 HTTPS 并且域名可控的免费空间,那是极少的. 同时,这还引发了另一个问题:由于 HTTPS 站点是禁止读取 HTTP 数据的,因此我们的节点也必须是 HTTPS 站点! 此外 SW 也得遵守同源策略.如果要读取第三方站点的数据,目标响应头里还得有 Access-Control-Allow-Orig

低成本打造一个带宽无限的网站

前言 前些年断断续续写的,最近突然想起来,于是翻出来又补充了一些,目前整理了几篇: 第 1 篇 -- 免费空间的遐想 第 2 篇 -- 通过缓存防御网站 第 3 篇 -- 前端代理服务 第 4 篇 -- 数据流优化 第 5 篇 -- 免费空间的挖掘 配图是 SVG 格式的,由于无法上传,目前放在 GitHub Pages 上.如果速度很慢或者被墙,可以开代理试试. 免费空间 自从学习网页制作那天起,就开始期待有朝一日能有个自己的网站. 尽管当时有不少免费空间,对于简单的个人网站也够用了,然而像我

低成本打造一个带宽无限的网站(四)

分块处理 上一篇曾提到,我们可对资源加密存储,然后在 SW 中进行解密. 理论上这当然可行,但事实上会出现一些问题:我们必须等整个资源下载完成后,才能开始解密操作.这对于用户体验,会产生很大的影响. 假如有个 1MB 的图片,通过 100 KB/s 的速度加载,那么要 10 秒后才能解密再展示:然而正常情况下,图片是边加载边显示的,并不会让用户等很久,然后一次性展示所有的. 为了解决这个问题,一个期待已久的新标准终于到来,那就是 Stream API. 有了流的支持,数据就可以渐进处理,而不必等

程序猿如何快速打造一个有设计感的网站

  像我这样的程序员来说经常被"设计"这个词吓到,因为我是一名程序员而不是设计师,我拥有的是计算机学位证,另外我对 Comic Sans 字体并不介意.(注:Comic Sans 字体是 Win95 附带的一种漫画字体,设计行业极为排斥,设计师或那些拥有美学情结的人不屑与之为伍) 虽然只是一名程序员,但我还是想让自己的网站看起来更加吸引人,一方面出于虚荣,因为这样可以显得我更加"专业",而另一方面是出于现实,因为研究机构调查发现用户会更加信任那些网站"看起

码农如何快速打造一个有设计感的网站

注:拥有属于自己的网站是很多人的梦想,但大多数人只能借助像 WordPress 这样的 CMS 实现,甚至很多公司网站也是这样.但这些网站大多数看起来都比较缺乏设计感,通俗来讲就是有点"土".那么对于像程序员以及其他对设计比较小白们来说,如何能让你的网站看起来更加前卫,有范,有设计感呢?极客公园编译了 24WAYS 的文章 How to Make Your Site Look Half-Decent in Half an Hour 为您提供解决方法. 像我这样的程序员来说经常被&quo

如何利用SEO打造一个成功的购物网站

电子商务崛起,无论是国内还是国外的互联网,都涌现出大量的http://www.aliyun.com/zixun/aggregation/7976.html">在线购物网站.竞争太过于激烈,如何让用户优先找到自己的网站.这是很多的购物网站的管理员都在思考的问题. 电子商务是与搜索引擎高度结合的一个行业,至少在目前来说是这个样子.大部分想在网上购物的用户,都会先在搜索引擎上搜索物品的相关信息,最后找到产品或服务的供应商. 根据思亿欧的调查,购物网站在互联网(指国内互联网)上面临的竞争更严峻.无

如何打造一个成功的购物网站

电子商务崛起,无论是国内还是国外的互联网,都涌现出大量的http://www.aliyun.com/zixun/aggregation/7976.html">在线购物网站.竞争太过于激烈,如何让用户优先找到自己的网站.这是很多的购物网站的管理员都在思考的问题. 电子商务是与搜索引擎高度结合的一个行业,至少在目前来说是这个样子.大部分想在网上购物的用户,都会先在搜索引擎上搜索物品的相关信息,最后找到产品或服务的供应商. 购物网站在互联网上面临的竞争更严峻.无论你的购物网站是从事销售数码.服装

教你快速打造一个有设计感的网站

对于好多程序员来说,经常被"设计"这个词吓到,因为Ta是一名程序员而不是设计师,拥有的是计算机学位证,另外对 Comic Sans 字体并不介意.(注:Comic Sans 字体是 Win95 附带的一种漫画字体,设计行业极为排斥,设计师或那些拥有美学情结的人不屑与之为伍.更多查看这篇为什么不要使用 Comic sans 字体) 虽然只是一名程序员,但还是想让自己的网站看起来更加吸引人,一方面出于虚荣,因为这样可以显得更加"专业",而另一方面是出于现实,因为研究机构

网站运营:如何打造一个有黏度的网站

中介交易 SEO诊断 淘宝客 云主机 技术大厅 用户的价值都是都最高的,无论是做网站的还是做产品的,因为它可以产生价值,先不说是付费用户还免费用户(对于产品来说),作为一个运营来说就是要把免费的变为付费的,把付费的再转化为二次消费,这就是增值服务,对于腾讯来说它有一个庞大的用户群体,QQ是免费提供给用户使用,但却利用一系列的增加服务让用户去掏钱购买,问题是如何利用增值服务去让用户黏住你的网站或产品,回来说一下提高用户黏度问题. 用户体验是网站建设的长久不衰的问题,一个网站做得如何?有经验的人士不