【问题标题】:NodeJs mirror website proxyNodeJs 镜像网站代理
【发布时间】:2014-04-23 04:45:30
【问题描述】:

当收到请求时,您将如何编写一个简单地镜像网站的服务器?例如,点击正在运行 NodeJS 的 http://localhost:5000 将呈现带有图像和所有内容的 cnn.com。这称为直通代理吗?

我不是在寻找需要在您的浏览器设置中配置实际代理的东西,而是通过传递请求来提供另一个网站的镜像。

【问题讨论】:

  • Node.JS(或任何基于 HTTP 的)确实不是最好的方法。像 SOCKS 代理这样的东西对你有用吗?这些设置起来要简单得多,并且除了具有 SSH 功能的服务器之外不需要任何东西。

标签: node.js proxy mirror


【解决方案1】:

首先,请确保我理解您的问题。

您希望让您的用户浏览到http://mynodeproxy.example.com,并在他们的浏览器中呈现该页面,就好像它是http://cnn.com。对吧?

答案是:你不能按照你认为的方式去做。这可以通过 2 种方法实现:

  1. 用户在其浏览器设置中配置真正的代理服务器(这就是所有浏览器都支持配置代理服务器的原因)。您可以使用现有的代理服务器或尝试使用节点和一些专门的应用程序逻辑编写自己的代理服务器。但关键是用户不要在浏览器的地址栏中输入您的代理地址。他们在浏览器设置“代理服务器”字段中输入您的代理地址,并在浏览器地址栏中输入“http://cnn.com”。

  2. 如果您控制来自网络的所有传出流量,则可以使用酒店式的技巧,例如 DNS 劫持或通过您的代理路由所有流量。

但这不会通过让您的用户将您的直通代理服务器地址放在他们浏览器的地址栏中来实现,因为您的代理从 CNN.com 获取的 HTML 将具有指向其他 cnn.com 资源的超链接(其他页面网站、图像、字体、CSS、JS 等)。如果这些链接包含主机名而不是相对于包含的 HTML 文档,浏览器将直接连接到 cnn.com 以加载它们,绕过您的代理。

现在想象一下 CNN HTML 有一个类似<a href="http://cnn.com">View the CNN Home Page</a> 的链接。当用户点击它时会发生什么?没错,您的代理完全不在画面中并绕过。这就是代理服务器使用显式浏览器支持的原因。

一旦 CNN.com 的 javascript 开始执行诸如发出 ajax 请求、向 DOM 动态添加内容等操作,您将发现仅通过代理和修改初始 cnn.com 主页 HTML 是不可能的。是的,你可以为一个极其微不足道的人为示例网页这样做,但实际上像 cnn.com 这样的现代流行网站是不可行的。

【讨论】:

  • 我不想代理所有请求,只需让localhost:8000 为cnn.com 提供服务,仅此而已。我不是在寻找需要在浏览器设置中配置的常规代理,而只是一种转发请求的方法,以便我提供某个站点的镜像。
  • 所以“just cnn.com”可能是几十个请求,包括来自许多其他主机的内容,如内容交付网络、youtube 等。它是一个“网络”。只是没那么简单。
  • 我完全明白这一点。域外的东西很好,但是应该转发/镜像同一个域的所有内容。
  • 我认为您已经很好地重新表述了这个问题,但我认为有一种方法可以在浏览器中不配置实际的 http 代理。见tomodo.com。我知道并非一切都可以正常工作(例如您指出的链接),但只是初始渲染就可以了,并且可以通过 XHR。
  • 所以,是的,http-proxy 模块是你的朋友,但我们只是说它很复杂,没有人能准确地回答基于不知道你认为需要什么以及什么是可以被破坏的,所以如果您希望有人向您粘贴代码 sn-p,我认为没有人会。您也可以通过 phantomjs 将其渲染到图像中,然后将屏幕截图发回(如果这就是您所需要的)。
猜你喜欢
  • 1970-01-01
  • 2011-04-27
  • 2013-07-30
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2011-01-24
  • 1970-01-01
相关资源
最近更新 更多