javascript - Heroku 上阻止加载 HTTP 混合内容

标签 javascript ajax heroku

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

Mixed Content: The page at 'https://farmers-market-finder.herokuapp.com/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=94118. This request has been blocked; the content must be served over 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.use(function (req, res, next){
  if (req.headers['x-forwarded-proto'] === 'https') {
    res.redirect('http://' + req.hostname + req.url);
  } else {
    next();
  }
});

关于javascript - Heroku 上阻止加载 HTTP 混合内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552088/

相关文章:

javascript - Javascript 中的多部分数据

javascript - 从 $(document).ready() 内部调用时 GM_xmlhttpRequest 不起作用?

angularjs - Heroku 和 Angular 路由

javascript - AngularJS如何将元素附加到特定元素

javascript - AngularJS 指令运行时模板更改

javascript - 使用 Rails 4、邮件表单和 ajax 发送电子邮件?

php - 防止 jQuery AJAX 调用等待上一个调用完成

ssl - Heroku 的解决方法不再支持 Cloudflare ("Strict TLS in CDN not supported"背后的 SSL)?

python - Heroku错误: Can't find Pywin32==214 on Django App

javascript - Lodash 通过匹配 ids 数组从数组中删除对象