2015-07-22 3 views
2

Я создаю веб-приложение с Node.js и Express. Когда я пытаюсь загрузить свой проект в Heroku, все мое содержимое успешно загружается на странице, но я получаю сообщение об ошибке, когда я пытаюсь выполнить любые действия, требующие вызова AJAX API, с которым я работаю:Заблокирован Загрузка HTTP смешанного содержимого на Heroku

Mixed Содержание: страница в 'https://farmers-market-finder.herokuapp.com/' был загружен через HTTPS, но запросил небезопасный XMLHttpRequest конечную точку http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=94118. Этот запрос заблокирован; содержимое должно быть передано через HTTPS.

Я работаю с API рыночных данных фермера, сделанное USDA, и последовал их рекомендуемый формат RESTful AJAX запросы:

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

Я сделал много исследований по Stack Переполнение и другие сайты об этой ошибке смешанного содержимого. Большинство ответов показывают, что маршрут запроса «GET» необходимо изменить на «https: // ...», чтобы работать на https-сервере Heroku. Я попытался переключить это, но маршрут к API больше не работает; Я получаю ошибку 404 Not Found. Я также попытался переключить свой маршрут на относительную ссылку (просто написать url: '//search.ams ...'), но получил ту же ошибку 404. Похоже, мне действительно нужна ссылка http: // для доступа к API, к которому я пытаюсь получить доступ.

Кто-нибудь знает, как получить Heroku, чтобы разрешить мне использовать ссылку «http» вместо https или какой-либо другой способ успешно выполнить запрос?

ответ

0

В файле server.js добавьте этот код над другими операциями app.use. (Приложение = expr

app.use(function (req, res, next){ 
    if (req.headers['x-forwarded-proto'] === 'https') { 
    res.redirect('http://' + req.hostname + req.url); 
    } else { 
    next(); 
    } 
}); 
Смежные вопросы