客栈提示:如何避免12306订票助手的悲剧(正确使用Github CDN)

标签: 全球客栈 | Global Coding Design Github | 发表时间:2013-01-17 09:14 | 作者:David Frank
出处:http://bitinn.net

最近某单让国内外程序员颇为欢乐的新闻浮出水面。

不,我不是在说那个已经被各大新闻站转载的错漏百出的 Verizon Case Study(顺便一提,不是Verizon的员工私自外包工作到中国,而是Verizon安全顾问团队接到一家美国公司的调查请求。)

我说的是: 12306订票助手,因为成为某国内浏览器[1]近期在媒体上大打广告的“春运抢票版”的默认插件,又因为 早期版本使用Github的Raw File作为CDN,并对返回403错误代码的请求使用暴力的5秒重试, 导致Github被间接的DDOS,整体服务质量下降,Github运营团队不得不对该代码Repo做特殊处理的事件

在这件事情上,12306订票助手的作者木鱼有 他自己的观点与总结,旅客们不妨去看看他的博文。

客栈今天想说的,是在基于阅读过他的全文,也感谢他每天更新12306订票助手的前提上,对他一些可能误导读者的观点进行补充——具体地说, Github作为CDN的使用方式,以及HTTPS下如何引用HTTP资源

把Github作为CDN的正确姿势

首先, 永远不要用Github的Raw file作为CDN。稍微Google一下你便会发现,Github的Raw file 对应传统CDN有三大劣势——

  • 它并非静态文件服务器,换句话说,所有请求访问都要先经过一堆服务器代码处理,降低了它的相应速度。
  • 它返回的MIME与文件无关(永远是text/plain),某些浏览器,例如说IE,不会执行MIME类型错误的javascript文件。
  • 它返回的Cache-Control Header不允许浏览器缓存文件,等于失去了CDN最基本的功能。

恰恰因为12306订票助手不运行于IE,也不希望更新文件被缓存,Raw file的后两个劣势才没有显现出来。但剩下的那个劣势,却让Github的响应速度大打折扣,不得不暂时封锁Raw file访问。

15日Github Status的数据。

16日转移到Sina App Engine后的数据。

那么, Github作为CDN的正道是什么?Github Pages。通过加入gh-pages branch,你可以修改和发布自己repo的文件。值得提醒,Pages虽然免费,并非资源无限,详见 官方Disk Quota的描述——“ 虽然我们没设上限,但请各位合理使用。”

合理使用包含什么?

  • 不要滥用免费资源。
  • 假如认为自己的行为可能涉及滥用资源,应该先向服务提供者请求意见。

事实上,如果插件作者事先与Github沟通,我相信他们也会给出类似的建议,毕竟已经有这么一个使用Github Pages作为专职CDN的服务了,它叫 Cached Commons。对应的手把手教程也不少——见 Github as a CDN

学会合理,我认为这才是12306订票助手事件带给所有人的最重要教训。Github负载能力如何,遇到403错误代码应该如何处理,都是技术细节。 合理使用考验开发人员的网络道德

Github轻描淡写的说 合理使用,而不是严明规章到MB、GB, 其实是一种潜意识的相互信任。这是一种在贫富悬殊供求关系紧张的中国日益缺少的东西,12306订票助手的存在就是一种印证:乘客不相信12306,12306不相信乘客,最后逼出一个12306订票助手,每天乃至每半天更新一次来满足中国人订票回家的需求。

只是没人想到, 对403代码的错误处理,对Github的错误使用,为浏览器营销的宣传推广,以及中国春运的压力,会演变成Github被DDOS的哭笑不得的故事吧

废话到此,回到技术问题上。

HTTPS下如何引用HTTP资源

这也是12306订票助手一开始选用Github的Raw file作为CDN的理由: 因为Chrome浏览器会禁止你从HTTPS引用HTTP的资源,javascript,CSS乃至flash

但凡事有例外, 请问Google Reader,是怎么在HTTPS域下播放优酷与土豆等非HTTPS的视频?我们在去年9月发现了 同样的问题,Google自己是这样解决的——

Chrome 21之后,在SSL加密页面embed非SSL的Flash会怎样呢?会被默默的屏蔽掉,只留下一句console报告。那Google Reader是怎么绕过这个问题看优酷与土豆视频的? 他们iframe了一个非SSL页面,再在里面引用flash(引用页连域名都是不同的)

同理也适用于Javascript,这也是12306订票助手当前的解决办法(Firefox除外)。不再需要SSL下的CDN了,这个事件也算告一段落。

正文完

[1] 浏览器是金山出品的“猎豹”,又一款符合中国特色的Trident (IE)+Webkit (Chromium)双内核浏览器外壳,内置12306的自签SSL证书……以下是我们用Fiddler抓取插件4.2.1/4.2.2版的访问信息,看来插件不仅自动更新,为了统计使用人数还附带了点Google Analytics和百度统计的tracking code( 数据包下载,可用Fiddler打开)——我很感兴趣现在有多少用户在用猎豹来抢票。


By David Frank at 比特客栈的文艺复兴, 2013. | 永久链接
Post tags: , ,

相关 [客栈 悲剧 正确] 推荐:

客栈提示:如何避免12306订票助手的悲剧(正确使用Github CDN)

- - 比特客栈的文艺复兴
最近某单让国内外程序员颇为欢乐的新闻浮出水面. 不,我不是在说那个已经被各大新闻站转载的错漏百出的 Verizon Case Study(顺便一提,不是Verizon的员工私自外包工作到中国,而是Verizon安全顾问团队接到一家美国公司的调查请求. 我说的是: 12306订票助手,因为成为某国内浏览器[1]近期在媒体上大打广告的“春运抢票版”的默认插件,又因为 早期版本使用Github的Raw File作为CDN,并对返回403错误代码的请求使用暴力的5秒重试, 导致Github被间接的DDOS,整体服务质量下降,Github运营团队不得不对该代码Repo做特殊处理的事件.

Siri 会悲剧?

- Hybrid-Force - 爱范儿 · Beats of Bits
当很多人认为 Siri 不过是个更好地语音识别程序的时候,我大喊革命,革命. 而当 Siri 的 AI 部分尽人皆知,尝试过 Siri 的 Blogger 们开始对他赞口不绝的时候. 该谈谈 Siri 的负面问题了. 但是,目前的舆论造就了太高的期待,这种期待是 Siri 的第一层阴影. 人们拿到 Android 打开 Voice Actions 会说 “send a text to Tom”.

演化学悲剧

- Vincent - 科学松鼠会

Ari Jaaksi,哥们你悲剧

- Brant - 爱范儿 · Beats of Bits
如果你从 2009 年开始关注我们,一定会发现我们写过不少关于诺基亚(Nokia) MeeGo 项目的文章,不论是 MeeGo 操作系统本身,我们还深切关注和 MeeGo 有关的那些人. 因此你一定听过这位哥们——Ari Jaaksi. 在诺基亚,他是软件副总裁,开源软件项目负责人,一直负责 Nokia 网络平板.

错过—人生悲剧

- sec314 - 译言-每日精品译文推荐
来源The Tragedy of Missing Out | zen habits. 曾经,一对饥肠辘辘的父子乘小船去捕鱼. 父亲帮儿子捞起第一条鱼,非常不错的一条鱼.     “这条鱼是不错,但只怕我错过了更好的. “我如果错过了更大、更美味的鱼呢.     “看来,你还需要在试一下.       儿子又试了试,一会儿果然捉到了一条更大的.

一个空格引发的悲剧

- Ray - cnBeta.COM
是这样子的――先来一点背景介绍,GitHub.com 这个网站,是目前最火的源代码托管网站及程序员社区,用它来托管和发布共享开源软件是免费的. 来自世界各地的程序员(或公司)们喜欢在这个网站上发布自己的项目源代码,也可以在这方便地获取、查看和评论别人的源代码.

[笑话连篇] 姓的悲剧

- 文刀刘 - 水木社区 今日十大热门话题
发信人: yutourr (白胡子是超人系), 信区: Joke. 发信站: 水木社区 (Sun May 22 16:57:09 2011), 站内. 每次告诉别人,别人都默认是于,于先生. 哪怕我给别人发邮件,签名档写得清清楚楚的“余X”,别人回邮件还是写着于先生. 这还好点,最要命的是电话给别人说的时候.

正确理解ThreadLocal

- - Java - 编程语言 - ITeye博客
转自: http://www.iteye.com/topic/103804. 首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的. 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创建的对象,每个线程创建一个,不是什么对象的拷贝或副本.

专利之殇:微软要把Android变成一个悲剧

- flycondor - 36氪
不知道大家有没有听过这样一个故事:上个世纪80年代初的时候,Sun Microsystems还只是一个创业性的科技公司. 某一天,一小撮IBM员工突然出现在了Sun总部大楼内,声称Sun侵犯了IBM 7 项专利并要求支付赔偿. Sun的员工在认真查阅了涉案的7件专利后发现其中6件很可能是无效的,而且Sun很明显也没有侵犯IBM所提到的第7件专利.

《斯坦利寓言》:在游戏中体验悲剧艺术

- cpy - Solidot
《斯坦利寓言(The Stanley Parable)》是一个Half-Life 2 mod,一个试验性游戏,一个以旁白驱动的游戏. 它类似一本根据选择而改变结局的互动书. 有多种选择,也有多个结局,玩家在空无一人的房间迷宫内寻找出路,但却没有真正的出路,就像一幕悲剧,一路上陪伴你的只有旁白,你无法躲开命运.