web-dev-qa-db-ja.com

JavaScriptでHTTPSを検出する

HTTPまたはHTTPS環境の場合、JavaScriptでどのように検出できるかを見つけようとしています。

私はAjaxリクエストを呼び出しているので、HTTPSでHTTP Ajaxを呼び出すと、一時的に302 Movedを取得します。

現在のwindow.location.hrefを取得して文字列操作を行うことを考えていました。

JavaScriptを使用してHTTPSを検出する最良の方法は何ですか?

40
ntan

非標準を使用できます

window.location.protocol 

Firefoxの場合: MDCドキュメント

IEでは、

 document.location.protocol

MSDNドキュメント

これが他のブラウザでどのように動作するかに関する信頼できる情報は見つかりませんが、document.location.protocolの準標準に準拠していると思います。

たぶん jQuery url plugin は、ブラウザ間の違いに対処する必要なくこれを解決します-私自身はこれを使用したことがありませんが、有望に見えます:

jQuery.url.attr("protocol");
41
Pekka

Googleアナリティクスがスクリプトをページに追加する方法を見てください。

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

そうすれば、document.location.protocolはすべてのブラウザにとって安全に思えます。

60
Rich

location.protocolはすべてのブラウザで動作します。

8
Ryan Fernandes

これはどう ?

 var protocol = window.location.href.indexOf("https://")==0?"https":"http";
7

多くの場合、プロトコルを完全に省略できます。したがって、代わりに

<img src="https://test.com/image.jpg" />

使用できる

<img src="//test.com/image.jpg" />

その後、ブラウザは現在のプロトコルを自動的に追加します。これはファイルをヘッドに含める場合にも機能し、ajax呼び出しにも機能するはずです。

編集:これを行うと、アンチパターンと見なされます:

SSLはすべての人に推奨されており、パフォーマンスの問題もないため、この手法はアンチパターンになりました。必要なアセットがSSLで利用できる場合は、常にhttps://アセットを使用してください。

スニペットがHTTP経由でリクエストできるようにすると、最近のGithub Man-on-the-side攻撃などの攻撃の可能性が開かれます。サイトがHTTP上にある場合でも、HTTPSアセットをリクエストしても常に安全ですが、その逆は当てはまりません。

参照: http://www.paulirish.com/2010/the-protocol-relative-url/

5
jberculo

このようなもののためのURIと呼ばれる本当にきちんとしたlibがあります。 https://github.com/medialize/URI.js

プロトコルを取得するためだけにこれは必要ありませんが、URIを文字列操作する場合は、これを使用する必要があります。

0
Yoh Suzuki