【问题标题】:Ember-CLI -- Setting HTTP Authorization Headers on HTTP-ProxyEmber-CLI -- 在 HTTP 代理上设置 HTTP 授权标头
【发布时间】:2014-09-25 18:30:03
【问题描述】:

我目前正在为我的 Neo4J 数据库使用 GrapheneDB,我正在从我的 Ember 应用程序中提取信息。 Neo4J 需要基本 HTTP 身份验证,因为我想要一个更安全的方法(而不是在我的 ajax 调用中明确说明标头),我正在尝试使用 http-proxy 连接到数据库。因此,通过 Ember-CLI,我生成了一个 http-proxy,其路径位于“/api”。在代理文件中,我有以下内容:

~/server/proxies/api.js

var proxyPath = '/api';

module.exports = function(app) {
  // For options, see:
  // https://github.com/nodejitsu/node-http-proxy
  var proxy = require('http-proxy').createProxyServer({});
  var path = require('path');


  app.use(proxyPath, function(req, res, next){
    var credentials = new Buffer('app-id:app-pw').toString('base64');
    // include root path in proxied request
    req.url = path.join(proxyPath, req.url);
    req.headers.authorization = "Basic " + credentials;

    proxy.web(req, res, { target: 'http://app-id.sb02.stations.graphenedb.com:24789/db/data/' });
  });
};

所以当上面运行时,在服务器上打印出来的标题看起来是正确的:

{ host: 'localhost:4200',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  authorization: 'Basic <correct base64 hash>' }

但是当转到我的 api URL 时,我得到以下请求标头:

GET /api HTTP/1.1
Host: localhost:4200
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

我得到一个 404 Not Found。但是当我删除授权标头时,我得到一个 401 Unauthorized 提示我输入用户名/密码。有时在标题上会显示:“授权:基本 Og==”。无论哪种方式都行不通。

有人知道这个问题的解决方案吗?我尝试了 node-http-proxy 文档中的示例 setHeader 代码,并在整个互联网上搜索了有关 ember http-proxy 的信息,但无济于事。提前致谢!

【问题讨论】:

    标签: ember.js neo4j ember-cli http-proxy node-http-proxy


    【解决方案1】:

    我只是在这里吐个球,因为我无法对此进行测试,但我认为您可以正常工作。您收到 404 是因为您请求的 'http://app-id.sb02.stations.graphenedb.com:24789/db/data/api' 可能不存在。也可能是因为接受头。如果您在浏览器中尝试它,则接受标头是 text/html 但您的目标可能期望 application/json 在这种情况下它是 404s。你可以试着卷曲它来测试一下'curl -H“ContentType:application/json”[target]'。

    【讨论】:

    • 感谢 GOULETGOULET 的回复,看来您是对的。我没有做 CURL,而是通过删除标题快速检查它,然后在网站提示时手动登录。登录后果然是 404。http-proxy 是否总是在目标 URL 前面加上前缀“/api”?因为 Neo4J 附带一个浏览器,您可以直接访问它是app-id.sb02.stations.graphenedb.com:24789/browser,但更改为这个目标 URL 也是 404 的。我的设置是否存在根本性问题?
    • 搞定了!这是您提到的附加 /api 。我不知道添加到网址中。非常感谢!
    【解决方案2】:

    正如 GOULETGOULET 所说,“/api”被附加到目标 URL 的末尾,并且我的目标中不存在这样的目录。因此将其交换为“db/data”是可行的。

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2017-04-17
      • 2015-05-30
      • 2016-04-24
      相关资源
      最近更新 更多