阻止在Heroku加载HTTP混合内容



我正在创建一个与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未找到错误。我还尝试切换我的路由到一个相对链接(只是写url: '//search.ams…'),但得到了相同的404错误。似乎我真的需要一个http://链接,以达到我试图访问的API。

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

在server.js文件中,将这段代码添加到其他app.use语句之上。(App = expr

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

相关内容

  • 没有找到相关文章

最新更新