JQuery AJAX не будет делать HTTPS-запросы
Я делаю довольно простые вещи jQuery Ajax на моем сайте, и у меня много проблем.
Вот соответствующий код:
$(document).ready( function() {
$("#getdatabutton").click( function() {
$.ajax({
url: "/jsontest/randomdata",
type: "get",
data: [{name:"ymax", value:$("#randomgraph").height()},
{name:"count", value:$("#countinput").val()},
{name:"t", value:Math.random()}],
success: function(response, textStatus, jqXHR) {
data = JSON.parse(response);
updateGraph(data);
$("#result").html(response);
if(data["error"] == "") {
$("#errorbox").html("None");
}
else {
$("#errorbox").html(data["error"]);
}
},
error: function(jqXHR, textStatus, errorThrown) {
$("#errorbox").html(textStatus + " " + errorThrown);
}
});
});
});
Страница загружается по HTTPS, но запросы XMLHttpRequest выходят за пределы HTTP.
Я попытался даже изменить URL-адрес на абсолютный ( https://larsendt.com/jsontest/randomdata), и он все еще отправляет запрос в HTTP-версию моего сайта.
Естественно, поскольку запрос идет по другому протоколу, вызов ajax завершается неудачно (междоменный и все такое).
Как сообщает Chrome:
The page at https://larsendt.com/jsontest/ displayed insecure content from http://larsendt.com/jsontest/randomdata/?ymax=500&count=32&t=0.08111811126582325.
Единственная другая важная информация, о которой я могу подумать, - это то, что я заставляю nginx сделать редирект 301 с http://larsendt.com/ на https://larsendt.com/, но я не понимаю, как это могло бы что-то сломать (я считаю, что это довольно стандартная практика).
Если вам нужна живая демоверсия, сломанная версия все еще доступна на https://larsendt.com/jsontest.
В любом случае, спасибо заранее.
2 ответа
Попробуйте исправить URL, чтобы ваш сервер не перенаправлял
url: "/jsontest/randomdata/" // there was a missing trailing /
// i.e. https://larsendt.com/jsontest/randomdata?ymax=500&count=32&t=0.9604179110508643
// was going to https://larsendt.com/jsontest/randomdata/?ymax=500&count=32&t=0.9604179110508643
301 Постоянное перенаправление может происходить. Чтобы проверить, запустите Fiddler и посмотрите колонку Result. Обычно 200 кодов, но я заметил 301 код.
Вызов https jquery ajax перенаправлял на http, вызывая ошибку смешанного содержимого.