結局のところ scheme-less relative URI って、お奨めなのかそうじゃないのかどっちなんだ

とあるサイトの「ユーザ登録」で https:// が機能してないことで疑問に思ったこと。

この問題に関してどの程度のコンセンサスがあるもんなのか、ワタシはアホなんでわからんのだが、自分なりに考えることが出来る程度にはそうアホでもない。

そもそもがリクエストしたページが https:// の場合にコンテンツに http:// へのリンクを含んでいる場合、セキュリティのためにブラウザによって拒絶される。たとえば Chrome の場合はこんな:

1 Mixed Content: The page at 'https://hoge.org' was loaded over HTTPS, but requested an insecure stylesheet 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/themes/redmond/jquery-ui.css'. This request has been blocked; the content must be served over HTTPS.

ブラウザも進化したもので、10年ほど前は「https:// に http:// を混ぜてはいけない!」とわざわざ IPA とかが注意喚起してまわらなければならなかったんだから、まぁ少しは安心になった、てことね。(無論これはせっかくの暗号化通信がだだもれになるからである。)

ただこのことに関する頭痛の種は、「http:// も https:// もユーザの好みに合わせて両方提供したい」サイトの記述であるわけね。このために「scheme-less relative URI」、つまり

1 <script type="text/javascript" src="//cdn.example.com/js_file.js"></script>

は適法・合法なのだろうか、もしくはクロスブラウザ問題は起こらないんだろうか、というのがこの stackoverflow での質問と議論

このことそのものについては answer-2975736の主張:

It is guaranteed to work in any mainstream browser (I’m not taking browsers with less than 0.05% market share into consideration). Heck, it works in Internet Explorer 3.0.

を信じたいところではあるんだけれども。

ただ、「scheme-less relative URI を積極的に使おうぜ、ごるぁ」てのとは違うと思うのな。一番わかりやすいのは当然「リンク先が SSL 必須で http:// を拒絶する」場合だけど、この場合に scheme-less relative URI の議論にはなりようがないので除外するとしても、当然この順序で考えるでしょうよ:

  1. SSL を是が非でも使いたいユーザのためには https:// を拒絶するサイトへのリンクはそもそも厳禁だろうよ
  2. http:// がベースの場合に https:// をミックスするのは問題ないんだから問題ないだろうよ
  3. だったら https:// も許容する、のサイトが「あえて」、「ユーザが http:// で訪問したんだからリンク先も http:// だろヲラァ」という意味、あるの?

つまり「https:// を許容する」リンク先は無条件に https:// に向けときゃいいんじゃね? つーことだよな。

てわけであれだ、自ドメインを指す場合の scheme-less relative URI には一定の価値を認めつつも、外部サイトを指すのに scheme-less relative URI って、「いらんのじゃないのか」てのが結論なんだろうね。

どうなの? WEB 専門の方々。

これまで自分のサイトが SSL 考えてこなかったんでこのサイトもかなり滅茶苦茶な気がするが、今後ちょっと注意しておこうかと思った。


2017-08-20追記:
なんだかワタシのこのページが「scheme-less relative URI」だけの google 検索の一ページ目に出ちゃうのね。まぁそんな検索でたどり着く人がこれに気付かないとも思えないけれど一応: Stop Using the Protocol-relative URLThe protocol relative URL is now an anti-pattern.