繁体   English   中英

NodeJs镜像网站代理

[英]NodeJs mirror website proxy

当收到请求时,您将如何编写仅镜像网站的服务器? 例如,点击运行NodeJS的http://localhost:5000会渲染具有图像和所有内容的cnn.com。 这称为直通代理吗?

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

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

您想让用户浏览到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这样的现代流行网站并不可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM