在收到请求时,您如何编写一个只是镜像网站的服务器?例如,点击运行NodeJS的http://localhost:5000
会向cnn.com呈现图像和所有内容。这被称为直通代理吗?
我不是在寻找需要在浏览器设置中配置实际代理的东西,而是通过传递请求来提供基本上是另一个站点的镜像。
答案 0 :(得分:1)
首先,让我确保理解你的问题。
您希望让您的用户浏览到http://mynodeproxy.example.com,并在浏览器中呈现该页面,就好像它是http://cnn.com一样。正确?
答案是:你不能按照自己的想法去做。这可以通过两种方法实现:
用户在其浏览器设置中配置真实代理服务器(这就是所有浏览器都支持配置代理服务器的原因)。您可以使用现有的代理服务器或尝试使用节点和一些专用的应用程序逻辑编写自己的代理服但关键是用户不要在浏览器的地址栏中输入您的代理地址。他们在您的浏览器设置中键入您的代理地址"代理服务器"字段仍然键入" http://cnn.com"进入他们的浏览器地址栏。
如果您控制来自网络的所有传出流量,您可以执行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这样的现代流行网站,这是不可行的。