1

我正在 CloudFoundry 上运行一个 NodeJS 应用程序,该应用程序旨在与我无法影响的现有 HTTP 客户端结合使用。

此 HTTP 客户端发送我的应用程序所依赖的请求标头,但遍历标头列表会使它们丢失。相反,在开发机器上运行 NodeJS 应用程序会按预期列出这些标头。

有问题的标头是特定于应用程序的,不是由 RFC 文档定义的,也不是以“X-”开头的。准确地说,有问题的客户端是游戏“EVE Online”的游戏内浏览器。客户端的标头以前缀“eve_”命名,因此“eve_trusted”将是一个真实的示例。

下面我们确定下划线字符 ('_') 是一个可能的问题 - 其他不带下划线的未知标头会被传递。

有没有办法获取请求的原始标头,这是对 Cloud Foundry 的功能请求,还是我在一般云服务的负载均衡器后面迷路了?

4

1 回答 1

1

只是为了帮助理解您的问题,我部署了一个简单的节点应用程序,该应用程序将输出客户端设置的标头,以便我可以使用 curl 发送任意值,代码如下;

var http = require('http');
var util = require('util');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end(util.inspect(req.headers));
}).listen(3000);

我将它部署到http://node-headers.cloudfoundry.com,请自行测试,我会暂时保留它。然后我使用以下语法和 curl 发送了一个请求;

curl --header "CustomHeader: Hello" node-headers.cloudfoundry.com

这产生了以下输出;

{ host: 'node-headers.cloudfoundry.com',
'x-forwarded-for': '80.175.199.28, 172.30.8.253',
connection: 'close',
'user-agent': 'curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5',
accept: '*/*',
customheader: 'Hello',
'x-cluster-client-ip': '80.175.199.28' }

您可以看到我使用 curl 发送的自定义标头。我还用多个实例对此进行了测试,结果相同。

如果我在这里遗漏了什么,请告诉我,我将非常乐意与您一起解决问题。

于 2012-08-15T08:32:50.293 回答