我有一個ECB實例在ELB後面運行,爲此我使用AWS Certificate Manager(ACM)啓用HTTPS。如我在幾個地方建議的那樣,我將HTTP(端口80)和HTTPS(443)映射到我的實例的HTTP(端口80)。AJAX調用失敗,出現混合內容HTTP/HTTPS錯誤,無法強制HTTPS
我也能加入這些行.htaccess文件強制安全連接:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
所有這一切工作粉墨登場。所有頁面按預期顯示安全內容,控制檯中沒有關於混合內容的警告。
僅在我進行AJAX調用的頁面上出現關於混合內容的錯誤,並且僅在Chrome中出現。 FireFox按預期工作,但控制檯仍然顯示錯誤。
錯誤(火狐):
內容安全策略:升級不安全請求 'http://example.com/myapi/get_company/?code=abcd&limit=8' 使用的 'https'
錯誤(鉻):
混合內容: '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包括協議,但沒有有所作爲。
爲什麼你需要條件RewriteCond%{HTTPS}!= on? – Shibashis