Blocked Loading Heroku上的HTTP混合内容

问题描述:

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

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

我与农贸市场数据的API,美国农业部做出的工作,并遵循了REST风格的AJAX请求他们的建议的格式:

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

我已经做了很多的研究堆溢出和其他网站关于此混合内容错误。大多数答案都建议,为了在Heroku的https服务器上工作,需要将'GET'请求路由改为“https:// ...”。我试着切换这个,但是到API的路由不再起作用;我收到一个404 Not Found错误。我也尝试将我的路线切换到相对链接(只写入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(); 
    } 
});