问题标签 [http-proxy-middleware]

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 投票
1 回答
8494 浏览

node.js - 如何使用 http-proxy-middleware 代理到许多不同的目标?

http-proxy-middleware库中,文档声明您可以使用该target选项来指定您希望代理请求的位置。但是,它们还允许您使用该router选项来指定将用于在运行时功能解析目标的函数。

文档:https ://www.npmjs.com/package/http-proxy-middleware

我正在使用 TypeScript,如果我查看代理的声明文件,我可以看到:

代理人

您可以在这里看到routertarget都是可以为空的。我的假设是,如果你使用一个,另一个可以省略,但你总是需要至少 1 个。

但是,如果我使用这样的router属性:

并省略target, 然后在运行时我收到此错误:

我意识到我可以将几乎任何东西放入target其中,它会运行得很好,而我的router函数就是实际定义目标代理的东西。这只是图书馆的一个错误,还是我误解了这两个选项的用途?

0 投票
1 回答
169 浏览

javascript - 带有 Wordpress 的 Webpack 代理不会在页面内重定向 GET 请求

我正在尝试创建一个 Wordpress 主题开发环境(更准确地说是从带有浏览器同步的 gulp 迁移到 webpack)。因此,我设置了一个代理指向我的 wordpress 安装(也在本地)。当我在浏览器中访问 webpack 开发服务器时,代理似乎工作正常。例如localhost:8080/sample-page显示 WordPress 页面localhost:8000/sample-page

问题是,该页面内的任何链接都将指向原始端口。当我使用页面上的导航时,我被重定向回localhost:8000/*.

使用 gulp,我只需要创建浏览器同步任务,其中一个选项是目标 URL,它运行良好:

我尝试更改 HTTP-proxy-middleware 的不同选项,目前,我得到了以下配置(我还尝试了自动重写等选项):

publicPath 将解析为/wp-content/themes/theme-name/build/(我也尝试包括整个 url 而不仅仅是路径)

我希望我可以让它像浏览器同步代理一样运行。也许我需要设置一些标题?

我感谢所有的帮助!

编辑:

我从浏览器同步源中找到了以下代码,它似乎有一种方法负责替换页面内的所有链接: https ://github.com/BrowserSync/browser-sync/blob/master/packages/browser-同步/lib/server/proxy-utils.js

开发服务器似乎有可能使用onProxyRes钩子修改请求,我可以在其中执行修改所有链接之类的操作,我只是没有时间尝试,所以我现在使用浏览器同步 atm。

0 投票
0 回答
204 浏览

asp.net-mvc-4 - 如何使用 http-proxy-middleware 捕获代理响应和重定向?

我有 webpack-dev-server 提供静态文件。(localhost:4000) 我有后端服务器服务于 api 请求。(本地主机)

在此之前,需要使用 idp 提供者进行身份验证。

当我访问时localhost:4000,它会被代理localhost进行身份验证。

localhost服务器重定向到 idp 进行身份验证,一旦经过身份验证的 idP 重定向回“localhost”。现在这就是问题所在。我希望它被重定向到localhost:4000not localhost

有没有办法做到这一点?

0 投票
0 回答
2293 浏览

javascript - 如何修复 express http-proxy-middleware 的超时

我正在使用 http-proxy-middleware 设置快速服务器。当从代理请求时,请求会一直持续到最终超​​时。

我尝试代理的 URL 是https://www.pegelonline.wsv.de/,尤其是它提供的 WFS。我已经阅读了文档,并且 TL;DR 似乎适用于我的案例,因为我不打算做任何列出的特殊事情。我也试过速记。

https://github.com/chimurai/http-proxy-middleware#tldr

最小的例子:

https://github.com/isthisstackoverflow/repro-waterlevel

https://pegelonline.wsv.de/webservices/gis/aktuell/wfs?service=wfs&version=1.1.0&request=GetFeature&typeName=gk:waterlevels&outputFormat=json&Filter=%3CFilter%3E%3COr%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ewater %3C/PropertyName%3E%3CLiteral%3EESTE%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Or%3E%3C/Filter%3E

^ 结果如预期。

http://localhost:9004/webservices/gis/aktuell/wfs?service=wfs&version=1.1.0&request=GetFeature&typeName=gk:waterlevels&outputFormat=json&Filter=%3CFilter%3E%3COr%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ewater%3C /PropertyName%3E%3CLiteral%3EESTE%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Or%3E%3C/Filter%3E

^ 最终超时。

更新

我认为问题是我试图将 https 代理到 http。不过,我不知道到底是什么问题,也不再需要这样做。

0 投票
1 回答
65 浏览

reactjs - 如何将我的 API URL 代理到其他代理

我在http://localhost:8081/post URL 上,我的 API 托管在一些“ http://dummy.restapiexample.com/api/v1 ”上。

我希望它出现在“/custom/create”之类的网络选项卡中。但是网络选项卡显示“ http://localhost:8081/custom/create ”,但不应在其中附加 localhost URL。它应该采用托管的 API URL。

我正在使用 CRA 样板。我不想用 express 来做同样的事情。

我尝试了以下代码

对于 API 调用,我使用以下格式:

我不知道如何隐藏整个托管 API URL 并在网络选项卡中显示代理 URL。

请就此提出宝贵的建议。

我是代理中间件的新手。先感谢您 :)

0 投票
1 回答
121 浏览

node.js - nodejs 使用动态子域代理请求

我希望我的服务器充当客户端和另一台服务器之间的中间件,问题是目标服务器有一个动态子域,每次随机更改

我已经尝试过 http-proxy-middleware,它适用于非动态目标,但我不能做得更好

我需要一种方法来代理从 x1.myserver.com 到 x1.traget_server.com 和 x2.myserver.com 到 x2.traget_server.com 的请求,其中 x1,x2 应该在运行时工作并动态添加的随机值

0 投票
1 回答
3980 浏览

node.js - 通过添加从另一个请求返回的身份验证令牌来修改 http 代理请求

我正在使用 http-proxy-middleware ( https://github.com/chimurai/http-proxy-middleware#http-proxy-events ) 来实现一个简单的代理 (调用它my-proxy/) 到另一个 REST API (调用它/rest-api)这要求用户在 HTTP 标头中传递身份验证令牌auth-token。可以使用POST /rest-api/auth正文中的凭据从端点获取令牌。

我希望我的代理接受传入的请求并检查是否auth-token在请求标头中设置,如果没有执行 aPOST /rest-api/auth以检索令牌并auth-token在将请求传递给rest-api/.

在我指定的代理配置中

我可以看到body.token返回正确的令牌。但是,setHeader调用失败并显示Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client.

我认为这意味着我修改的请求在等待回调之前已经发送到rest-api/,但我不知道在我的场景中如何最好地解决这个问题。

有什么帮助吗?

0 投票
1 回答
3375 浏览

node.js - 无法在 express api 和反应应用程序中使用 http-proxy-middleware 进行代理

我有一个调用 node-express API 的反应应用程序,它代理到不同主机上的另一台服务器。

它给了我 http 302

我的反应应用程序在https://localhost:3000 我的 node-express api 在http://localhost:8080

反应应用程序中的代码:

快递应用程序中的代码:

0 投票
1 回答
2973 浏览

reactjs - 在 http-proxy-middleware 的 setupProxy.js 中反应导入环境生成意外标识符

我需要使用 craco 获得的变量来设置代理 http-proxy-middleware 的目标。我已按照本指南为不同的环境提供更多配置文件。我有 3 个文件 local.js、development.js 和 production.js,它们由 craco 使用不同的 npm run startlocal、startdevelopment 选择。

在 package.json 我有:

问题是我想根据我所处的环境更改代理功能,因此使用 http-proxy-middleware 我使用了 setupProxy.js ,如guide所述。如果我从“环境”插入导入环境;在 setupProxy.js 我有错误的意外标识符。

这是 setupProxy.js 的代码:

npm run startlocal 的控制台输出

意外的标识符
npm ERR!代码 ELIFECYCLE
npm 错误!errno 1
npm 错误!seltirmedfront_candidati@0.1.0 startlocal:cross-env CLIENT_ENV=local craco start
npm ERR!退出状态 1
npm ERR!
npm 错误!在 seltirmedfront_candidati@0.1.0 startlocal 脚本中失败。
npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。

我想这个问题与 setupProxy.js 是自动加载的并且在 craco.config.js 之前加载的事实有关,所以它没有那个导入。

0 投票
1 回答
3077 浏览

node.js - http-proxy-middleware“set-cookie”响应未在浏览器中设置

我曾尝试查看过去对此类问题的响应,例如以下内容,但它们都会引发各种错误:

我的代理设置返回正确Response Headers的设置 cookie set-cookie: JSESSIONID=yElsHUaPE8Ip_AAD_oIfTQ; Path=/; Secure; HttpOnly;:. 这些不是会话 cookie。

但是,我的登录正式失败,因为JSESSIONID它没有被存储为 cookie。

这是我的代理设置:

成功时,服务器返回一个302重定向。这会有影响吗??这就是为什么我有代理表的原因......

此外,由于看起来响应正常,我已经删除了onProxyRes希望自动设置它的字段,但也没有运气。

我很欣赏任何想法/解决方案。