问题标签 [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.
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;博士
- 我在 NodeJS 中有一个面向 HTTP 端口 80 的网络应用程序。
- 我在 NodeJS 中有一个使用 Socket.IO ( EtherCalc ) 在非公共端口上的同一服务器上运行的第 3 方 Web 应用程序。
- 我想将我自己的 webapp 中的网页和 EtherCalc 中的网页提供到端口 80 上的相同域名。
- 我
node-http-proxy
在我的 webapp 上运行了一个代理 ( ) 来实现这一点。 - 出于某种原因,当我这样做时,在浏览器和 EtherCalc 的服务器之间发生的握手(现在通过代理运行)需要永远。(或者更确切地说是 10 秒,对于面向消费者的网页来说,AKA 是不可接受的)
- 我不知道为什么会这样。
任何线索/提示/建议/线索?Socket.IO 对我来说是全新的——我已经使用 Node 很长一段时间(2 年),但它完全是在 HTTP 世界中。代理对我来说也是新的(这是我第一次使用代理 - 将它用于命名空间/端口问题)。因此,我真的不知道从哪里开始寻找。
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) 上完美运行,但在服务器上却不行。
node.js - 使用 node-http-proxy 访问响应头
我正在尝试借助使用 node-http-proxy 创建的代理来修改响应。但是我无法访问响应标头。我想访问响应标头,因为我想修改 javascript 文件并将修改后的 javascript 文件发送到客户端。
这是我的代码:
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 发送到节点代理服务器?
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 请求,还是我必须手动做的事情?
node.js - 使用 http-node-proxy 创建转发 https 代理
我正在尝试创建一个能够处理 HTTPS 网站的转发代理。我正在尝试观察和修改不同站点的流量。这是我的代码,适用于 http 网站,但不适用于 https 网站。
谢谢你们的帮助!
node.js - http-proxy 转发到特定路径
在使用 node.js 尝试 http-proxy 时,我有以下代码:
显然所有的请求http://localhost:8000/AAA
都http://localhost:8000/BBB
被代理http://myDomain.com
我正在尝试将请求代理到http://localhost:8000/AAA
,http://myDomain.com/AAA/rss.xml
但无法弄清楚如何设置它。
我试过:
但它抛出异常。
或者
是低效的。
有人知道如何设置吗?
node.js - node.js http-proxy 如何根据请求设置超时和处理程序
我在 node.js 上使用 http-proxy。我有一个到另一台服务器的代理请求。我的要求是代理请求应该在 10 秒内超时。此外,当超时发生时,我应该能够向用户显示自定义消息
我有以下代码
这会设置超时(由于未知原因,它会在 17 秒内超时),但永远不会执行回调。它只显示标准浏览器消息
提前致谢
更新:
我试过了
这次该方法被调用,但它抱怨响应已经发送,因此无法设置标头
node.js - 使用 node-http-proxy,用 proxyRequest 改变 url
修改node-http-proxy 示例时...
问题: 手动更改req.headers.host
为远程主机('example.com')时,浏览器中的 url 没有改变。
注意:我认为这是可行的,但是当使用 google.com 作为我的示例时,事实证明 google 正在检测代理并更改主机。
问题:有没有办法每次都将浏览器中的 url 更改为远程主机(即 example.com)?谢谢!
java - 无法通过代理进行隧道传输。代理返回“需要 HTTP/1.1 407 代理授权”
我试图点击 google api 的 https url。使用下面的代码,但它给出了一些错误。但我可以点击一个 google api http url 并且它工作得很好,没有任何错误
但在下面出现错误
有什么帮助吗???