私はAngularJSを使用しています、$resource
&$http
とapis
を使用しますが、セキュリティ上の理由により、HTTPSリクエストを作成する必要があります(HTTPSプロトコルで動作します)。
AngularJSでhttps
を使用する方法は何ですか。ご協力いただきありがとうございます。
通常どおり_$http
_ apiを使用します。
_$http.get('/someUrl').success(successCallback);
_
アプリがHTTPS経由で提供されている場合、発信している呼び出しはすべて同じホスト/ポートなどに送信されるため、HTTPS経由でも送信されます。
リクエストに完全なURIを使用する場合(例: $http.get('http://foobar.com/somePath')
その後、https
を使用するようにURIを変更する必要があります
何らかの理由で、リクエストの末尾に末尾/がない場合、AngularはすべてのリクエストをHTTP経由で送信します。ページ自体がHTTPS経由で提供される場合でも。
例えば:
$http.get('/someUrl').success(successCallback); // Request would go over HTTP even if the page is served via HTTPS
ただし、先頭にすべてを追加すると、すべてが期待どおりに機能します。
$http.get('/someUrl/').success(successCallback); // This would be sent over HTTPS if the page is served via HTTPS
編集:この問題の根本的な原因は、Angularがサーバーからの実際のヘッダーを調べることです。 httpsを介したhttpデータの内部パスが正しくない場合、httpヘッダーが残り、最後に/を追加しない場合、Angularはそれらを使用します。つまり、httpsを介してコンテンツを提供するNGINXがあるが、httpを介してバックエンドのGunicornにリクエストを渡す場合、この問題が発生する可能性があります。これを修正する方法は、正しいヘッダーをGunicornに渡すことです。そのため、フレームワークはhttps経由で提供されるという印象を受けます。 NGINXでは、次の行でこれを行うことができます。
proxy_set_header X-Forwarded-Proto $ scheme;
私は最近、Angular 1.2.26を使用して同様の問題に遭遇しましたが、ロードバランサーを介して相互作用する場合のみ-https関連ヘッダーを取り除く可能性があります...まだ原因は不明です。私はこれに頼った:
uri = $location.protocol() + "://" + $location.Host() + "/someUrl"
非標準のポートを使用している場合も、$ location.port()を追加することをお勧めします。