Как сделать запрос 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]