问题标签 [node-http-proxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
763 浏览

node.js - 使用带有nodeJS的自定义路径将WebSockets和HTTP代理到单独的NodeJS应用程序?

语境

我正在尝试在 NodeJS 中构建一个新的 Web 应用程序。这个 webapp 使用两个主要组件。

1) 我在 NodeJS 中编写的代码——也就是我自己的逻辑流程。

2)使用 HTTP 和 Socket.io的第 3 方开源 NodeJS 应用程序 - EtherCalc

EtherCalc 本身就是一个完全独立的 Web 应用程序。它是一个浏览器+服务器中的电子表格,旨在用作独立应用程序。重要的是,它有自己的命名空间(因为它有各种路径名可以路由到不同的函数)。

我的应用程序和 EtherCalc 各自在各自的端口上独立运行。

为简单起见,让域名为localhost.

我打算解决的挑战

我的应用程序将使用 EtherCalc 的电子表格功能,以及我自己的代码的非电子表格相关的逻辑流程。用户将可以访问这两个界面。但是,我希望这一切看起来都来自一个 URL/端口——我不希望非程序员指定不同的端口来访问不同的功能。

对我来说解决这个问题的最简单方法是在我的应用程序中为 EtherCalc 创建一个命名空间。任何以/ethercalc/自动开头的路径都会被转发到运行 EtherCalc 的端口(在ethercalc/转发之前从请求 URL 中删除)。任何不以此开头的内容都保留在标准服务器逻辑流程中。

我正在使用node-http-proxy以下代码来实现这一点:

我遇到的问题

最初这似乎运行良好 - 当我转到任何/ethercalc/url 时,电子表格界面就会加载。但是,EtherCalc 使用 WebSockets 或 JSON Polling 以使服务器和浏览器保持在同一页面上。这似乎无法正常工作。出于某种原因,实际连接起来需要 10 秒的时间。如果我处理过电子表格,然后再次加载它,这尤其成问题 - 在我真正看到我事先输入的数据之前有 10 秒的窗口。

出现此问题后是删除 url 更改功能。现在我的应用程序只是将请求转发到运行 EtherCalc 的端口。但是,问题仍然存在。直接连接到 EtherCalc 所在的端口可以解决问题。

重写代码以使用 node-http-proxy 的httpProxy.createServer()代码也没有什么不同 - 完全相同的结果......

奇怪的是,当连接到我的应用程序端口(具有代理/转发系统的端口)时,经过漫长的等待期后,它运行良好 - 一切都完全实时同步。

有人知道这是怎么回事吗?

TL;博士

  1. 我在 NodeJS 中有一个面向 HTTP 端口 80 的网络应用程序。
  2. 我在 NodeJS 中有一个使用 Socket.IO ( EtherCalc ) 在非公共端口上的同一服务器上运行的第 3 方 Web 应用程序。
  3. 我想将我自己的 webapp 中的网页和 EtherCalc 中的网页提供到端口 80 上的相同域名。
  4. node-http-proxy在我的 webapp 上运行了一个代理 ( ) 来实现这一点。
  5. 出于某种原因,当我这样做时,在浏览器和 EtherCalc 的服务器之间发生的握手(现在通过代理运行)需要永远。(或者更确切地说是 10 秒,对于面向消费者的网页来说,AKA 是不可接受的)
  6. 我不知道为什么会这样。

任何线索/提示/建议/线索?Socket.IO 对我来说是全新的——我已经使用 Node 很长一段时间(2 年),但它完全是在 HTTP 世界中。代理对我来说也是新的(这是我第一次使用代理 - 将它用于命名空间/端口问题)。因此,我真的不知道从哪里开始寻找。

0 投票
1 回答
1061 浏览

node.js - 使用 Socket.io 的 node-http-proxy websocket 超时

由于某种原因,http-proxy 会导致基于 socket.io 的 websocket 连接每 2 分钟重新连接一次。在重新连接之前,客户端和服务器之间的消息工作得很好。如果我绕过代理,websocket 连接无需重新连接即可工作。代理配置非常基本,并遵循 nodejitsu 的示例。

我也尝试更改配置中的超时选项,但这对重新连接问题没有影响。

软件版本:Ubuntu 12.04 服务器,node.js 0.8.16,http-proxy 0.8.7,socket.io 0.8.7。

这在开发 Mac (10.8.3) 和 Ubuntu 桌面 12.04 (virtualbox) 上完美运行,但在服务器上却不行。

0 投票
1 回答
1331 浏览

node.js - 使用 node-http-proxy 访问响应头

我正在尝试借助使用 node-http-proxy 创建的代理来修改响应。但是我无法访问响应标头。我想访问响应标头,因为我想修改 javascript 文件并将修改后的 javascript 文件发送到客户端。

这是我的代码:

0 投票
1 回答
929 浏览

node.js - 将用户/通行证从 IE8/9 发送到 node.js 代理

我们有使用 REST API 的主干.js 应用程序。每个请求用户/通行证都应该发送到 API。这是我们发送请求的方式:

`Backbone.BasicAuth.set(tempUser, tempPass);

这不适用于 IE 8/9,因此我们制作了 node.js 服务器,并使用 node-http-proxy 模块制作了代理服务器,它将拦截所有请求。

这是节点代理服务器:

我们现在的问题是将用户/通行证发送到节点代理服务器,我们知道 XDomainRequest 不支持自定义标头,并且我们不喜欢将用户/通行证作为查询字符串发送(它不安全)。

有没有一种方法可以将用户/密码从 IE 8/9 发送到节点代理服务器?

0 投票
1 回答
529 浏览

node-http-proxy - 如何使用 node-http-proxy 代理所有 HTTP 请求

我正在尝试设置node-http-proxy。我的目标是在我的网站上放置一个代理。我可以通过在服务器上执行 GET 然后更改 HTML 中的链接来手动执行此操作,但如果有的话,我想使用现有的解决方案。也许我不完全理解 node-http-proxy 是什么。这是我的测试代码:

我去 localhost:8000 并返回 NPR。但是返回的源仍然包括直接指向 NPR 的链接,例如:

因此,如果我使用代理来访问被阻止的网站,它将无法正常工作。如果我使用代理来阻止终端服务器知道客户端下载了某些东西,它也不会起作用。基本上,唯一发生的 HTTP 代理是初始 GET(我认为)。

node-http-proxy 是否能够代理所有 HTTP 请求,还是我必须手动做的事情?

0 投票
5 回答
9117 浏览

node.js - 使用 http-node-proxy 创建转发 https 代理

我正在尝试创建一个能够处理 HTTPS 网站的转发代理。我正在尝试观察和修改不同站点的流量。这是我的代码,适用于 http 网站,但不适用于 https 网站。

谢谢你们的帮助!

0 投票
0 回答
379 浏览

node.js - http-proxy 转发到特定路径

在使用 node.js 尝试 http-proxy 时,我有以下代码:

显然所有的请求http://localhost:8000/AAAhttp://localhost:8000/BBB被代理http://myDomain.com

我正在尝试将请求代理到http://localhost:8000/AAAhttp://myDomain.com/AAA/rss.xml但无法弄清楚如何设置它。

我试过:

但它抛出异常。

或者

是低效的。

有人知道如何设置吗?

0 投票
1 回答
4689 浏览

node.js - node.js http-proxy 如何根据请求设置超时和处理程序

我在 node.js 上使用 http-proxy。我有一个到另一台服务器的代理请求。我的要求是代理请求应该在 10 秒内超时。此外,当超时发生时,我应该能够向用户显示自定义消息

我有以下代码

这会设置超时(由于未知原因,它会在 17 秒内超时),但永远不会执行回调。它只显示标准浏览器消息

提前致谢

更新

我试过了

这次该方法被调用,但它抱怨响应已经发送,因此无法设置标头

0 投票
1 回答
1317 浏览

node.js - 使用 node-http-proxy,用 proxyRequest 改变 url

修改node-http-proxy 示例时...

问题: 手动更改req.headers.host为远程主机('example.com')时,浏览器中的 url 没有改变。

注意:我认为这是可行的,但是当使用 google.com 作为我的示例时,事实证明 google 正在检测代理并更改主机。

问题:有没有办法每次都将浏览器中的 url 更改为远程主机(即 example.com)?谢谢!

0 投票
2 回答
19479 浏览

java - 无法通过代理进行隧道传输。代理返回“需要 HTTP/1.1 407 代理授权”

我试图点击 google api 的 https url。使用下面的代码,但它给出了一些错误。但我可以点击一个 google api http url 并且它工作得很好,没有任何错误

但在下面出现错误

有什么帮助吗???