被代理的 HTTP 响应被修改
Proxied HTTP response being modified
我有一个启动开发代理服务器的 gulpfile。
gulp.task('dumbserver', ()=> {
const express = require('express');
const httpProxy = require('http-proxy');
const app = express();
const proxy = httpProxy.createProxyServer();
app.use('/api', function (req, res) {
proxy.web(req, res, {target: 'https://bos1-vcd-sp-static-199-8.eng.vmware.com/api', secure: false},
(e) => console.log('error', e)
);
});
return app.listen(8080, function () {
console.log('Server started on port 8080.');
});
});
当我直接调用 postman 到 https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/session
时,我得到以下负载:
<Session locationId="86171c79-e8f0-4c06-a0a8-4bc7fde76915@7bcf706c-d90f-4e1b-b0cc-b2a13db3e618" org="juan" roles="System Administrator" user="administrator" userId="urn:vcloud:user:7b5f0241-f597-4851-8cae-655a15afde24" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/session" type="application/vnd.vmware.vcloud.session+xml">
<Link rel="down" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/org/" type="application/vnd.vmware.vcloud.orgList+xml"/>
<Link rel="remove" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/session"/>
<Link rel="down" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/admin/" type="application/vnd.vmware.admin.vcloud+xml"/>
<Link rel="down" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/admin/extension" type="application/vnd.vmware.admin.vmwExtension+xml"/>
<Link rel="nsx" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/network" type="application/xml"/>
<Link rel="openapi" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/cloudapi" type="application/json"/>
</Session>
但是,当我使用邮递员调用 localhost:8080/api/session
时,最后两个链接的 hrefs 被重写为
<Link rel="nsx" href="https://localhost:8080/network" type="application/xml"/>
<Link rel="openapi" href="https://localhost:8080/cloudapi" type="application/json"/>
但是 none 的其他链接已被重写。
对可能发生的事情有什么建议吗?
原来http-proxy
增加了一个HOSTheader。生成链接的服务器端代码使用 HOST header 作为基础 URL,覆盖配置值。
不删除问题是希望 http-proxy 向请求添加主机 header 的已知事实可能会导致您的代码出现错误。
我有一个启动开发代理服务器的 gulpfile。
gulp.task('dumbserver', ()=> {
const express = require('express');
const httpProxy = require('http-proxy');
const app = express();
const proxy = httpProxy.createProxyServer();
app.use('/api', function (req, res) {
proxy.web(req, res, {target: 'https://bos1-vcd-sp-static-199-8.eng.vmware.com/api', secure: false},
(e) => console.log('error', e)
);
});
return app.listen(8080, function () {
console.log('Server started on port 8080.');
});
});
当我直接调用 postman 到 https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/session
时,我得到以下负载:
<Session locationId="86171c79-e8f0-4c06-a0a8-4bc7fde76915@7bcf706c-d90f-4e1b-b0cc-b2a13db3e618" org="juan" roles="System Administrator" user="administrator" userId="urn:vcloud:user:7b5f0241-f597-4851-8cae-655a15afde24" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/session" type="application/vnd.vmware.vcloud.session+xml">
<Link rel="down" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/org/" type="application/vnd.vmware.vcloud.orgList+xml"/>
<Link rel="remove" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/session"/>
<Link rel="down" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/admin/" type="application/vnd.vmware.admin.vcloud+xml"/>
<Link rel="down" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/api/admin/extension" type="application/vnd.vmware.admin.vmwExtension+xml"/>
<Link rel="nsx" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/network" type="application/xml"/>
<Link rel="openapi" href="https://bos1-vcd-sp-static-199-8.eng.vmware.com/cloudapi" type="application/json"/>
</Session>
但是,当我使用邮递员调用 localhost:8080/api/session
时,最后两个链接的 hrefs 被重写为
<Link rel="nsx" href="https://localhost:8080/network" type="application/xml"/>
<Link rel="openapi" href="https://localhost:8080/cloudapi" type="application/json"/>
但是 none 的其他链接已被重写。
对可能发生的事情有什么建议吗?
原来http-proxy
增加了一个HOSTheader。生成链接的服务器端代码使用 HOST header 作为基础 URL,覆盖配置值。
不删除问题是希望 http-proxy 向请求添加主机 header 的已知事实可能会导致您的代码出现错误。