プレーンな//プレフィックス付きURLの代わりにdocument.location.protocolを使用するのはなぜですか?


11

たとえば、Google Analyticsはボイラープレートのdocument.location.protocolを追跡に使用します。

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

の代わりに

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = '//www.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

SSL。https://www.google-analytics.com/ga.jsが完全に機能するため、サブドメインはミュート引数です。

Googleを知ることは、おそらく見落としではありません。特定のブラウザに//省略形を尊重するプロトコルをサポートしていない問題がありますか、それとも他に何か不足していますか?

編集:これは、Google Analytics(異なるサブドメインの例)に適用されるだけではありません。同じことがFont Loader APIページに表示されます

wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
    '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';

なぜGoogleが何かしているのではなく、技術的な問題について尋ねる質問を言い換えると、より適切な応答が得られる可能性があります。2番目の質問に対する実際の回答は得られません(ここに別のGoogle社員の回答が表示されない限り、これはすばらしいでしょう)。
JasonBirch、2010

より不可知的にするために少し編集してください。他に何か提案はありますか?
Metalshark、2010

回答:


3

実際、それはGAチームによる見落としではありませんでした
GAローダーはスクリプトを読み込みます。そのため、IE7 / IE8での、<link>または@importスタイルシートの二重ダウンロードのバグの影響は受けません。

彼らは上の条件(三)演算子を使用するdocument.location.protocol ため、非'ssl」サブドメインからの要求時にセキュリティダイアログが特定のセキュリティ設定でポップアップする原因とIE6のエッジケースのバグのため、 ポール・アイルランドで説明したように働いていた人(この問題に関するGoogleアナリティクスのJavaScriptリード開発者とともに)彼のブログ:https : //www.paulirish.com/2010/the-protocol-relative-url/引用元:
IE6セキュリティのセキュリティダイアログの画像、ソース:http://paulirish.com/i/7b01.png

2011.01.23:しかし... Google Analyticsスニペットでこれを使用するのはどうですか?
はい、もちろんそれはいいことではありません...それで、Google AnalyticsのJavaScriptリード開発者(神、私はgoogleで働くのが大好き)と協力して、これができるかどうかを確認しました...できないことがわかりました。IE6にはエッジケースバグがあり、非ssl 'サブドメインからリクエストすると、一部のセキュリティ設定(デフォルトかどうか不明)でダイアログが爆発します。スクリーンショットはこちら。したがって、IE6を気にしない場合は、GAスニペットから40バイトを自由に削除してください。そうでない場合は、3項演算子が必要になります。`:)`
2011.12.24。(IEチームの)Eric Lawは、IE6がGAでうまく動作しない理由について不満を述べています...
これがIE6で機能しない理由は、サーバーがSNIを使用して、返す証明書を推定しているためです。XP(およびIE6)はHTTPSスタックでSNIをサポートしていません詳細については、を参照してください


1

Google Analyticsの場合の違い、つまり、セキュアバージョンがのhttps://ssl.代わりにオンになっていることをすでに指摘しましたhttp://www.。wwwの安全なバージョンも機能する可能性がありますが、sslバージョンとは異なる場合があります。

  • sslバージョンとwwwバージョンの異なる証明書。
  • バージョンごとに異なるコード。
  • SSLドメインに固有の異なるCookieセット。

これらのいずれかがGoogleに当てはまるかどうかはわかりません。一見すると、コードは同じに見えました。


もう1つの例は、フォントローダーcode.google.com/apis/webfonts/docs/webfont_loader.htmlです。ここでは、ドメインに違いはありません。コードのボイラープレートの例はすべて同じパターンに従います。
Metalshark、2010

その場合、彼らは同じドメインを使用しています。たぶん、//プロトコルを認識しない古いブラウザがいくつかありますか?
DisgruntledGoat 2010

それがその考えでしたが、どれがWebフォントをサポートしているのか、さらに重要なのはどれですか。それはより多くの並列動作を可能にしますか(ブラウザの状態を変更するプロトを読み取ることにより量子物理学スタイル)?私は徹底的にテストしましたが、ロジックはまだわかりません...
Metalshark、2010

0

このスタックオーバーフローの回答は、いくつかの良い点を示しています。

ローカルドライブから開いたドキュメント内でターゲットアセットが正しく読み込まれるようにプロトコルを明示的に指定することが重要です(file:)、または「iframe magic」を使用する場合(about:)。


0

//www.google-analytics.com/ga.js必須のスキームがないため、標準に準拠したURLではありません。動作し、使用されていますが、URL標準に準拠していません。

RFC3986§3を参照してください。

スキームとパスのコンポーネントは必須ですが、パスが空(文字なし)の場合もあります。権限が存在する場合、パスは空であるか、スラッシュ( "/")文字で始まる必要があります。権限が存在しない場合、パスを2つのスラッシュ文字( "//")で始めることはできません。


スキームはブラウザで同じである場合は必要ありません。
Metalshark、

RFCを読んでください。このスキームはすべてのURLで必須です。これは、何が機能するかには関係なく、標準は単に別の言い方をし、実際には偏差があります。
Patrick Mevzek 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.