node.js - NodeJs镜像网站代理

标签 node.js proxy mirror

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

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

最佳答案

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

您想让用户浏览到 http://mynodeproxy.example.com并让该页面在浏览器中呈现为 http://cnn.com 。对吗?

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

  1. 用户在浏览器设置中配置真实的代理服务器(这就是所有浏览器都支持配置代理服务器的原因)。您可以使用现有的代理服务器或尝试使用 Node 和一些专门的应用程序逻辑编写自己的代理服务器。但重点是用户不要在浏览器的地址栏中输入您的代理地址。他们在浏览器设置的“代理服务器”字段中输入您的代理地址,并且仍然在浏览器地址栏中输入“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 这样的现代流行网站来说,这是不可行的。

关于node.js - NodeJs镜像网站代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23234936/

相关文章:

c++ - 通过防火墙代理将 Arduino 连接到 Internet

Swift 获取泛型类中的所有属性

r - 如何相对于最后一个值镜像/反射向量

javascript - 通过 POSTMAN 注册 Azure IoT 中心设备会导致未经授权

proxy - 使用 Envoy 在网络之间设置隧道

node.js - FeathersJS客户端如何知道服务路径是否无效?

java - Spring 中的作用域代理是什么?

mysql - 如何备份MySQL数据库?

node.js - 使用我的应用程序登录登录我的 Gitlab CE 安装

javascript - 设置三个 express 实例 : admin, 站点和应用程序