我正在尝试建立一个开放设备实验室。
这个问题主要集中在测试设备请求的响应中的网络路由和代码注入。
我希望人们能够带着笔记本电脑来这里,尽可能轻松地进行测试。我希望开发人员能够:
- 检查移动浏览器,
- 不必在文件更改时刷新每个页面,并且
- 不必单独导航每个设备。
为了实现这一点,我选择使用以下技术(分别):
所有这些技术都需要在请求的网页中包含 JavaScript 代码片段,以便打开并维护与服务器程序的套接字连接。我想使用代理服务器来注入这些代码片段。
下面是我计划如何设置测试网络的图像:
我将快速解释一下实验室不同部分的作用:
本地 Web 服务器 + 测试设备
这台机器是开发人员使用的机器,运行他们选择的 Web 服务器(Apache、Nginx、IIS 等等)。这没什么关系)。这可以兼作测试设备。开发人员必须安装一些软件,当文件发生变化时通知 LiveReload 服务器(例如guard-livereload)。它将通过WiFi连接到路由器。
测试设备
这些移动设备正是实验室存在的原因。它们呈现的网页将可使用 weinre 检查,使用 LiveReload 在文件更改时刷新,并在任何其他设备使用 Shim 导航时导航。它们将通过 WiFi 连接到路由器。
路由器
路由器将使用代理服务器来处理端口 80 上的所有请求。它还将使用代理服务器机器作为 DNS 服务器。
代理服务器
此服务器不仅仅是一个代理服务器。其任务包括:
- DNS 服务器(这样本地测试域就可以正常工作,而不必单独配置每个设备,考虑使用斯姆宾为了这),
- 代理服务器(为了注入 JavaScript 代码片段),
- 一个 weinre 服务器(能够检查任何连接的 WebKit 客户端),
- LiveReload 服务器(在适当的时候向所有连接的浏览器发出信号,刷新整个页面或部分资源),
- Shim 服务器(在适当的时候向所有连接的浏览器发出导航信号),以及
- 网络速度限制(模拟慢速连接)。
总结
我正在努力解决的问题如下:
- 哪些代理软件可以在请求中注入代码?
- 我如何才能将代码仅注入本地端口 80 的 HTML 请求(由 MIME 类型指示)并包含
</body>
(“本地”指测试网络,而不是发往更广泛互联网的请求)?此外,代码需要注入到 的正前方</body>
。 - 我如何透明地通过代理路由所有流量(以便我可以注入代码和限制速度),即我当前的设置是否可以工作?
我将非常感激您的想法。
答案1
你可能正在寻找的功能是ICAP(互联网内容适配协议)。
有一个 Python 框架可以处理它(http://icap-server.sourceforge.net/),而 Squid 本身现在可能也具有该功能(至少在开发中)。
Squid Wiki 上有更多信息(以及其他 ICAP 服务器的列表)http://wiki.squid-cache.org/Features/ICAP#ICAP_Servers
答案2
虽然我很欣赏 ICAP 的建议,但开源 ICAP 服务器已经过时且/或文档记录不佳。我花了几天时间尝试设置 ICAP 解决方案,但毫无成效。
因此我转向使用 Apache 作为代理。我将其配置为透明正向代理,并将过滤器链配置为膨胀(如果内容被压缩)、替换和压缩(如果最初被压缩)。这非常有效。
在通过代理路由所有流量方面,我为所有设备和本地 Web 服务器设置了单独的接入点。它们位于不同的子网中,因此路由器(与代理计算机相同)需要在两者之间路由流量,并通过代理发送流量。
由于只有一个接入点,我遇到的问题就是出站流量通过代理,但本地流量却没有。
设备实验室完成后,我会发布一篇更详细的文章,介绍如何设置设备实验室。我还在想办法解决一些问题(与这个问题无关)。