2016-05-19 80 views
2

我有一個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包括協議,但沒有有所作爲。

+0

爲什麼你需要條件RewriteCond%{HTTPS}!= on? – Shibashis

回答

0

我找到了一個解決方案,現在發佈了我自己的問題的答案。不要問我,我怎麼想通了這一點,因爲我不能給你一個明確的答案,但是這是它幹了什麼:

$url = "/myapi/get_company?code=" + e; 

改爲:

$url = "/myapi/get_company/?code=" + e; 

通知尾隨斜線,就在參數之前。處理服務器端AJAX調用的實際文件位於:

/myapi/get_company/index.php 
0

更新的.htaccess配置

RewriteCond %{HTTPS} !=on - >不需要

更新.htaccess文件配置到

RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

除了改變.htaccess文件,你還需要確保,一旦使用HTTPS方案加載頁面,由該頁面創建的ajax調用不應該在HTTP上。您看到的錯誤是瀏覽器錯誤,並與您的elb配置方式隔離。

+0

不幸的是,這並沒有幫助。它根本沒有任何區別。事實上,我也嘗試刪除所有3行,如果當前頁面已經以HTTPS顯示,那麼這並沒有什麼不同。如果當前頁面以HTTP格式顯示,並且刪除了一行內容而不是一切正常。 我也不認爲問題出在JavaScript上。我相信它與ELB配置有關,以及它如何將流量路由到EC2。我無法弄清楚如何解決這個問題。 –

+0

是應用程序的硬編碼方案,在js文件中。它應該使用傳入方案動態構建到服務器。 – Shibashis

+0

對不起,我不太清楚「計劃」是指什麼。如果我不強制執行HTTPS,一切正常。 –

0

檢查問題是否在服務器上,而不是在客戶端上。您的AJAX調用是通過API端點進行的; 當它應該返回HTTPS重定向時,API端點是否會返回HTTP重定向?

相關問題