У меня есть один экземпляр EC2, работающий за ELB, для которого я использовал AWS Certificate Manager (ACM), чтобы включить HTTPS.
Как было предложено в нескольких местах, я сопоставил HTTP (порт 80) и HTTPS (443) с HTTP (порт 80) моего экземпляра.
Я также включил принудительное безопасное соединение, добавив эти строки в файл .htaccess:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Все это прекрасно работает. На всех страницах отображается безопасное содержимое, как и ожидалось, без предупреждений в консоли о смешанном содержимом.
Только на страницах, где я выполняю вызов AJAX, я получаю сообщение об ошибке смешанного содержимого и только в Chrome. FireFox работает должным образом, но консоль по-прежнему показывает ошибку.
Ошибка (FireFox):
Политика безопасности контента: обновление небезопасного запроса 'http://example.com/myapi/get_company/?code=abcd&limit=8 'использовать' https '
Ошибка (Chrome):
Смешанное содержание: страница "https://example.com/mypage" была загружена по HTTPS, но запросила небезопасная конечная точка XMLHttpRequest 'http://example.com/myapi/get_company/?code=abcd&limit=8 '. Этот запрос заблокирован; контент должен обслуживаться по HTTPS.
Я открыл chrome://net-internals/
и из того, что я вижу, есть два вызова: первый получает HTTP 301 Permanent Redirect
, а второй не работает, потому что перенаправление указывает на страницу HTTP, а не HTTPS.
Вызов AJAX выглядит так:
$url = "/myapi/get_company?code=" + e;
apiJson = $.ajax({
url: $url,
dataType: 'json',
data:{
limit:8
},
success: function(data) { //Some code here },
error: function(jqXHR, textStatus, errorThrown) { //Some code here }
});
Я также попытался указать полный URL-адрес, включая протокол, но это не имело значения.