HTTPまたはHTTPS環境の場合、JavaScriptでどのように検出できるかを見つけようとしています。
私はAjaxリクエストを呼び出しているので、HTTPSでHTTP Ajaxを呼び出すと、一時的に302 Movedを取得します。
現在のwindow.location.href
を取得して文字列操作を行うことを考えていました。
JavaScriptを使用してHTTPSを検出する最良の方法は何ですか?
非標準を使用できます
window.location.protocol
Firefoxの場合: MDCドキュメント
IEでは、
document.location.protocol
これが他のブラウザでどのように動作するかに関する信頼できる情報は見つかりませんが、document.location.protocol
の準標準に準拠していると思います。
たぶん jQuery url plugin は、ブラウザ間の違いに対処する必要なくこれを解決します-私自身はこれを使用したことがありませんが、有望に見えます:
jQuery.url.attr("protocol");
Googleアナリティクスがスクリプトをページに追加する方法を見てください。
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
そうすれば、document.location.protocolはすべてのブラウザにとって安全に思えます。
location.protocol
はすべてのブラウザで動作します。
これはどう ?
var protocol = window.location.href.indexOf("https://")==0?"https":"http";
多くの場合、プロトコルを完全に省略できます。したがって、代わりに
<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/
このようなもののためのURIと呼ばれる本当にきちんとしたlibがあります。 https://github.com/medialize/URI.js
プロトコルを取得するためだけにこれは必要ありませんが、URIを文字列操作する場合は、これを使用する必要があります。