阻止在Heroku上加载HTTP混合内容

时间:2015-07-22 00:50:55

标签: javascript ajax heroku

我正在使用Node.js和Express创建一个Web应用程序。当我尝试将项目上传到Heroku时,我的所有内容都在页面上成功加载,但是当我尝试执行任何需要对API进行AJAX调用的操作时,我收到错误:我正在使用:

  

混合内容:页面位于   ' https://farmers-market-finder.herokuapp.com/'是通过HTTPS加载的,   但是请求了一个不安全的XMLHttpRequest端点   http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=94118。   此请求已被阻止;内容必须通过HTTPS提供。

我正在使用由美国农业部制作的农民市场数据API,并遵循他们建议的RESTful AJAX请求格式:

 $.ajax({
    type: 'GET',
    url: 'http://search.ams.usda.gov/farmersmarkets/v1/data.svc/mktDetail?id=' + id, 
    async: false,
    success: function (data) { ... }
    })

我已就Stack Overflow和其他网站对此混合内容错误进行了大量研究。大多数答案表明' GET'请求路由需要更改为" https://..."为了使用Heroku的https服务器。我试过切换它,但到API的路径不再有效;我收到404 Not Found错误。我也尝试将我的路线切换到相对链接(只是写url:' // search.ams ...')但是得到了相同的404错误。好像我确实需要一个http://链接来访问我尝试访问的API。

有没有人知道如何让Heroku允许我使用" http"链接,而不是https,或其他一些方式成功发出请求?

1 个答案:

答案 0 :(得分:1)

In your server.js file, add this code above your other app.use statements. (App = expr

app.use(function (req, res, next){
  if (req.headers['x-forwarded-proto'] === 'https') {
    res.redirect('http://' + req.hostname + req.url);
  } else {
    next();
  }
});