Pourquoi un protocole n'est-il pas spécifié pour cette étiquette de script facebook?

Avec cela, je peux générer un bouton similaire: D

<script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> 

Mais pourquoi n'est-ce pas

Js.src = "un certain protocole: //connect.facebook.net/en_US/all.js#xfbml=1";

Pourquoi le protocole n'est-il pas spécifique?

C'est un truc utile qui vous permet d'utiliser une seule référence qui fonctionne sur les pages HTTP et HTTPS. Lorsque le protocole d'une URL est omis, le navigateur utilise plutôt le protocole du document sous-jacent.

Sur une page chargée par un HTTP régulier et non chiffré, les références de script utilisant cette URL seront chargées via HTTP et seront mises en cache normalement. De même, sur une page sécurisée qui a été chargée via HTTPS.

Ainsi, l'utilisation de l'URL sans protocole permet à une référence de script unique de s'adapter à ce qui est le plus optimal: HTTP et support de mise en cache complet sur les pages HTTP et HTTPS sur des pages sécurisées afin que vos utilisateurs ne soient pas confrontés à un avertissement de contenu mixte.

Source: http://encosia.com/cripple-the-google-cdns-caching-with-a-single-character/

C'est une petite astuce appelée URL relative au protocole qui "vous sauver des maux de tête".

La spécification d'un protocole ne garantit pas que le même protocole utilisé dans la demande d'initiation est supposé également pour la demande du fichier de script.

Si vous demandez via http, le script sera chargé via https, etc.

Pourquoi le protocole n'est-il pas spécifique?

Parce qu'en omettant le schéma, une partie d'une URL indique au client d'utiliser le protocole qu'il a déjà utilisé la demande dans laquelle le document a intégré cette ressource.

Dans ce cas, il permet au navigateur de choisir http: // ou https: //, selon que le document lui-même a été chargé via "normal" HTTP ou HTTPS.

Lorsque le protocole est omis, le navigateur suppose http ou https conformément au protocole de la page actuelle. Cela permet d'inclure des ressources externes sans se soucier des avertissements de sécurité.

Bien sûr, pour que cela fonctionne, le chemin de la ressource externe doit être disponible dans le protocole de la page actuelle.