2016-05-19 4 views
2

私はELSの背後で実行されている1つのEC2インスタンスを持っており、AWS Certificate Manager(ACM)を使ってHTTPSを有効にしています。AJAXが混在したコンテンツで失敗するHTTP/HTTPSエラー、HTTPSを強制できません

いくつかの場所で示唆されているように、HTTP(ポート80)とHTTPS(ポート44)をインスタンスの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の):

コンテンツセキュリティポリシー:

混在したコンテンツ: 'HTTPS'

エラー(クローム)を使用するには 'http://example.com/myapi/get_company/?code=abcd&limit=8' を安全でない要求をアップグレード'https://example.com/mypage'のページがHTTPS経由でロードされましたが、安全でないXMLHttpRequestエンドポイント 'http://example.com/myapi/get_company/?code=abcd&limit=8'が要求されました。このリクエストはブロックされました。 HTTPS経由でコンテンツを配信する必要があります。

私はchrome://net-internals/を開いて、私はHTTPのページへのリダイレクトポイントではなく、HTTPSので、最初のものはHTTP 301 Permanent Redirectを受信して​​、第2のいずれかに障害が発生した2つのコールがある見ることができるものから。

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}!=の条件が必要ですか? – 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ファイルを変更するから>は必要ありません

更新.htaccessファイルの設定に

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

ページがHTTPSスキームを使用してロードされると、ページからのajax呼び出しはHTTP上にあってはならない。あなたが見ているエラーは、ブラウザのエラーであり、あなたのelbの設定から隔離されています。

+0

残念ながら、これは役に立たなかった。それはまったく違いはありませんでした。実際には、3行すべてを削除しようとしましたが、現在のページがすでにHTTPSで表示されていても差はありません。現在のページがHTTPで表示され、行がすべて削除されている場合は、すべてが正常に機能します。 JavaScriptに問題はないと私は考えています。私はそれがELBの設定とどのようにトラフィックをEC2にルーティングするのかと考えています。私はちょうどこれにアプローチする方法を把握することはできません。 –

+0

ur appはjsファイルでハードコーディングスキームです。サーバーへの受信スキームを使用して動的に構築する必要があります。 – Shibashis

+0

申し訳ありませんが、私はあなたが "スキーム"によって何を参照しているかについてはあまりよく分かりません。 HTTPSを強制しないとすべてうまく動作します。 –

0

問題がサーバーではなくクライアント上にあるかどうかを確認します。あなたのAJAX呼び出しはAPIエンドポイントへの呼び出しです。 そのAPIエンドポイントはHTTPSリダイレクトを返すべきときにHTTPリダイレクトを返しますか?

関連する問題