我被要求确定在火车上的移动服务器上镜像或caching网站的可行性。 不幸的是,这在最后一刻已经降到了我的头上,我不得不在一两天内拿出答案,而我在这方面的经验也不多。
火车是:
在服务范围外时,客人应该能够继续访问之前访问过的网站。 这些将是客人可能在他们的下class生活中访问的一般网站,我们将无法控制。 还有一些网站会被自动caching或“拉进”,比如新闻和时事,这不一定是客人发起的。
我知道我们可以镜像或caching访问过的页面,但是我担心我们将要运行的“环境”。
任何其他资源,你可以指向我将不胜感激。
谢谢。
我认为可行性是相当低的,你必须考虑以下问题,结合我认为排除“可用”或透明离线镜像的可能性。
现在HTTPsstream量越来越普遍,如果不在设备上安装CA证书,用户应该会很犹豫,您将无法进行caching。
许多网站在很大程度上依赖于客户端HTTP请求(即AJAX)来运行,而且在大多数情况下,站点通过向URL附加时间戳来避免AJAX请求被caching,从而将每个请求视为唯一的URL 。
你基本上可以排除任何有状态的网站(即需要login) – 显然你不能caching人X的Facebook的个人资料,除非他们已经查看了它,即使他们已经看到这些网站的价值严重减less没有实时更新。 此外,这意味着你的caching查找将不得不依赖于cookie的价值,因此减less了你在其他人请求的页面上击中的机会。
大多数人如何到达网站? 人们很lessinputurl,通常他们search的东西 – 甚至是他们知道如Facebook的url的东西。 尝试caching复杂的search引擎结果是一个挑战,因为它们可能是有状态的(例如,如果您在login到Google帐户的情况下searchGoogle,结果将会不同)
在浏览网页时,新内容与内容的百分比是多less? 即使浏览一个你喜欢Facebook的网站,你也会经常点击新的页面,等等。
有些网站现在使用WebSocket,并不确定具体的细节,但我想这很难模拟/重播WebSockets的交互。
如果您有理由相信您的用户将访问相同的一组页面(例如一组文档),那么很大一部分时间和这个内容并不是有状态的,那么这可能是可行的。
实际上,我每年要举办一次非常相似的活动,在一个为期一周的活动中举行一次,所以我有一点经验可以分享。
首先,TL; DR:你可以做到,但不会像你(或者你的上级)所期望的那样好。 这可能不值得困扰,特别是如果中断时间很短。 但是,无论如何,您可能都想要这样做,以便在连接到3G时节省带宽并提供更快的体验。
你正在寻找的组件是一个透明的代理 ,它截获了传出的HTTP请求,而客户端并不希望被代理,并将它转移到代理服务器上。 而鱿鱼是最常用的透明代理软件。 这是我用的。
它的工作方式是:交换机或路由器将拦截远程地址的端口80的数据包,并将它们打包,以便它们最终连接到代理。 然后它检查它的caching,并且如果caching未命中,它将进入networking。 典型的代理东西。 我用一些简单的Linux iptables规则来做这个转换,尽pipe很多路由器和交换机也可以configuration成这样做。
出于您的目的,您还需要对squid的configuration进行一些重大调整,以覆盖其caching处理。 特别是当它无法在networking上重新validation时,它会导致它提供一个陈旧的caching项目。 我没有这个configuration,因为在我的devise中没有必要,我在一个固定的点,并且有连续的无线服务。 但是,一些仔细的文件阅读应该build议一种方法来做到这一点。
您还将需要创build一些引用您的公司的定制Squid错误页面,并解释预期的各种停止服务条件。
而现在是偏偏。
您将无法使用HTTPS请求完成此操作。 虽然Squid确实支持类似于HTTP请求拦截HTTPS请求的方法,但您将无法使用它,因为它需要创buildCA并在每个客户端的浏览器中安装证书。 对一个企业来说足够简单,但对于公共服务来说却不是那么容易。 而且,即使可以,这也不是用户友好的,会在任何隐私的人头脑中引发警报,在一些国家这样做是非法的。
另外,现在许多Web站点使用的WebSocket在涉及透明代理时几乎总是会失败 ,因为代理(正在做它应该做的事情)会将升级请求超出认可范围。 除了build议用户明确使用代理服务器之外,您无能为力。 在这种情况下,浏览器知道使用HTTP CONNECT以不同方式格式化请求,以便它可以不受干扰地通过代理。
最后,在与一些熟悉澳大利亚火车旅行的人交谈之后,我了解到,这些中断有时会持续10到15分钟。 你可以做的事情很less, 在此期间浏览网页的用户很可能会尝试点击指向尚未caching的网站的链接,而且现在的状况并不比现在好得多,不过如果您有caching,则可以至less告诉乘客这种情况(至less在HTTP上)。 当互联网出去的时候,乘客可能会更好地看着窗外,试图发现Nullarbor Nymph。
还有一些基本的统计数据。 去年该服务使用了42 GB的数据,并从caching中提供了额外的17 GB。 今年这项服务使用了87 GB的数据,并从caching中提供了744 MB。 这不是一个错误的计算,或者只要我可以告诉一个configuration错误。 去年和今年caching之间的大部分差异似乎是,更多的主要网站现在迫使HTTPS。 例如,去年我能够caching一些YouTubevideo。 今年我不能,因为他们现在通过HTTPS服务。
随着越来越多的网站转移到HTTPS,这种caching策略每年都变得越来越不可行,而运行caching似乎越来越没有意义。
我的build议是,你不打扰。 但是你可以设置一个,在一列火车上进行试验,然后测量结果。
您也可以尝试指导用户明确configuration代理,以便您可以处理HTTPS和WebSocket,尽pipe根据我的经验,这对用户来说很难做到。 您可能可以实现WPAD以自动configuration某些用户,但请注意,Android和iOS设备对该设备的支持很差或不支持。