Как сделать запрос AJAX HTTPS GET с помощью jQuery

Как я могу явно выполнить запрос GET AJAX HTTPS с помощью jQuery? Я пытаюсь сделать следующее. На странице https у меня есть строка с кодом $.get("/resource"), но я получаю следующую ошибку

XMLHttpRequest cannot load http://www.site.com/resource. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.site.com' is therefore not allowed access.

Почему вызов AJAX пытается получить доступ к странице с использованием протокола HTTP, если относительный ресурс находится на странице https? Если метод $.get(url) делает это по умолчанию, как мне использовать jQuery для выполнения явного запроса HTTPS GET? Другой человек, у которого была подобная проблема, на http://forum.jquery.com/topic/jquery-get-ajax-call-on-http-page-to-https-on-same-domain не смог его решить.

Версия jQuery - 1.7.2

Ответы

Ответ 1

Я исправил проблему. Оказалось, что из-за того, что наш сайт Django настроен, мне нужно было добавить трейлинг-косую черту к ресурсу в запросе AJAX. Без завершения косой черты Django будет перенаправлять на URL с конечной косой чертой, используя HTTP-запрос вместо запроса HTTPS.

Короче говоря, я заменил $.get("/resource") на $.get("/resource/").

Спасибо. Я очень ценю вашу помощь.

Ответ 2

Если страница, на которой вы находитесь, является https-страницей, а страница .get пытается получить доступ к http, то это не будет работать из-за того же происхождения. Однако вы можете просто написать ajax вместо короткой передачи его с помощью .get:)

$.ajax({
    type: "GET", 
    url: "https://someurl"
});

Хотя я считаю, что это справедливо, это все еще не соответствует истинному javascript

Ответ 3

Попробуйте установить тип данных на "jsonp", что помогло мне в прошлом с запросами на перекрестный поиск.

    $.ajax({
            url: "//www.site.com/resource"
            dataType: "jsonp",
            success: function(data) {
                $(".demo-card").html(data);
            }
    });

Ответ 4

Просто используйте RewriteRule в файле .htaccess с указанным протоколом, например:

RewriteCond %{REQUEST_URI} .+[^/]$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L,QSA]