481 votes

Est-il valable pour remplacer http:// avec le // dans un <script src="http://...">?

J'ai de l'élément suivant:

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

Dans ce cas, le site est en HTTPS, mais le site peut également être simplement HTTP. (Le fichier JS est sur un autre domaine.) Je me demande si c'est valable pour effectuer les opérations suivantes pour des raisons de confort:

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

Je me demande si c'est valable pour supprimer l' http: ou https:?

Il semble que cela fonctionne partout où je l'ai testé, mais existe-il des cas où il ne fonctionne pas?

399voto

Jeff Points 11642

Une URL relative, sans un schéma (http: ou https:) est valide, par la RFC 3986: "Identificateur de Ressource Uniforme (URI): Syntaxe Générique", la Section 4.2. Si un client étouffe, alors c'est la faute du client, car ils ne sont pas conforme à la syntaxe d'URI spécifié dans la RFC.

Votre exemple est valide et doit travailler. Je l'ai utilisé qu'une URL relative à la méthode de moi-même sur des sites à fort trafic et ont eu aucune plainte. Aussi, nous testons nos sites dans Firefox, Safari, IE6, IE7 et Opera. Ces navigateurs tous comprendre que le format de l'URL.

157voto

Andrew Moore Points 49765

Il est garanti pour fonctionner en toute intégrer navigateur (je ne suis pas tenu de navigateurs avec moins de 0,05% de part de marché en considération). Heck, il fonctionne dans Internet Explorer 3.0.

RFC 3986 définit un URI comme composé des parties suivantes:

     foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment

Lors de la définition d'Uri relatifs (Section 5.2), vous pouvez omettre l'autre de ces articles, toujours en partant de la gauche. En pseudo-code, il ressemble à ceci:

 result = ""

  if defined(scheme) then
     append scheme to result;
     append ":" to result;
  endif;

  if defined(authority) then
     append "//" to result;
     append authority to result;
  endif;

  append path to result;

  if defined(query) then
     append "?" to result;
     append query to result;
  endif;

  if defined(fragment) then
     append "#" to result;
     append fragment to result;
  endif;

  return result;

L'URI que vous décrivez est un programme en moins par rapport URI.

82voto

Thilo Points 108673

existe-il des cas où il ne fonctionne pas?

Si le parent page a été chargée d' file://, alors il ne fonctionnera probablement pas (il va tenter d'attirer file://cdn.example.com/js_file.js, ce qui bien sûr, vous pourriez fournir localement).

41voto

SLaks Points 391154

Beaucoup de gens appellent cela un Protocole d'URL Relative.

Il provoque un double-télécharger des fichiers CSS sous IE 7 et 8.

27voto

KennyTM Points 232647

Ici, je double la réponse dans http://stackoverflow.com/questions/954327/hidden-features-of-html/960111#960111:

À l'aide d'un protocole indépendant absolue chemin d'accès:

<img src="//domain.com/img/logo.png"/>

Si le navigateur est l'affichage d'une page dans SSL via le protocole HTTPS, puis elle demande cet actif avec le protocole https, sinon ça va la demande HTTP.

Cela empêche l'horrible "sur Cette Page Contient à la Fois sécurisé et Non Sécurisé Les éléments" message d'erreur dans internet explorer, en gardant tous vos actifs les demandes dans le même protocole.

Mise en garde: Lorsqu'il est utilisé sur un <link>ou @importer une feuille de style, IE7 et IE8 télécharger le fichier deux fois. Tous les autres utilise, cependant, sont tout simplement beaux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X