NodeJs镜像网站代理

当你收到一个请求时,你会如何编写一个简单镜像一个网站的服务器? 例如,点击正在运行NodeJS的http://localhost:5000将使用图像和所有东西来呈现cnn.com。 这是否被称为传递代理?

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

首先,让我确定我理解你的问题。

您希望让您的用户浏览到http://mynodeproxy.example.com,并将浏览器中的该页面呈现为http://cnn.com 。 对?

答案是:你不能像你想的那样去做。 这是可能的两种方法:

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

  2. 如果您控制networking中的所有传出stream量,则可以执行酒店式的技巧,如DNS劫持或通过代理路由所有stream量。

但是这不会让你的用户把你的直通代理服务器的地址放在浏览器的地址栏中,因为你的代理从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请求,dynamic添加东西到DOM等,你会看到这是不可能的,只是简单的代理和修改cnn.com首页的HTML。 是的,你可以这样做一个非常小的人为的例子网页,但实际上像cnn.com现代stream行的网站,这是不可行的。