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, вызывая ошибку смешанного содержимого.

Другие вопросы по тегам