web-dev-qa-db-fra.com

URI commençant par deux barres obliques ... comment se comportent-ils?

Dernièrement, j'ai vu travailler des blocs de code comme celui-ci:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

Et selon RFC 2396 (syntaxe URI) et RFC 2616 (HTTP 1.1), ces URI commençant par deux barres obliques sont valides, mais malheureusement les RFC ne les expliquent pas vraiment.

Quelqu'un peut-il m'indiquer une ressource qui explique comment les navigateurs traiteront/devraient traiter ces URI?

91
pagid

La ressource que vous recherchez est la RFC 3986 .

Voir section 4.2 et section 5.4. Citant ce dernier:

Exemples de résolution de référence

Au sein d'une représentation avec un URI de base bien défini de:

    http://a/b/c/d;p?q

une référence relative est transformée en son URI cible comme suit:

  "g:h"           =  "g:h"
  "g"             =  "http://a/b/c/g"
  "./g"           =  "http://a/b/c/g"
  "g/"            =  "http://a/b/c/g/"
  "/g"            =  "http://a/g"
  "//g"           =  "http://g"
  "?y"            =  "http://a/b/c/d;p?y"
  "g?y"           =  "http://a/b/c/g?y"
  "#s"            =  "http://a/b/c/d;p?q#s"
  "g#s"           =  "http://a/b/c/g#s"
  "g?y#s"         =  "http://a/b/c/g?y#s"
  ";x"            =  "http://a/b/c/;x"
  "g;x"           =  "http://a/b/c/g;x"
  "g;x?y#s"       =  "http://a/b/c/g;x?y#s"
  ""              =  "http://a/b/c/d;p?q"
  "."             =  "http://a/b/c/"
  "./"            =  "http://a/b/c/"
  ".."            =  "http://a/b/"
  "../"           =  "http://a/b/"
  "../g"          =  "http://a/b/g"
  "../.."         =  "http://a/"
  "../../"        =  "http://a/"
  "../../g"       =  "http://a/g"

Cela signifie que lorsque l'URI de base est http://a/b/c/d;p?q et vous utilisez //g, la référence relative est transformée en http://g.

86
Daniel Vassallo

Ce sont RL relatives au protocole. Ils pointent vers une adresse, en conservant le protocole actuel.

Cette notation est souvent utilisée pour éviter le problème de "contenu mixte" (un message d'avertissement IE se plaignant des ressources http et https sur la même page HTTPS).

Mise à jour: documentation officielle dans RFC 3986:

Une référence relative qui commence par deux caractères de barre oblique est appelée une référence de chemin de réseau; ces références sont rarement utilisées. Une référence relative qui commence par un seul caractère barre oblique est appelée une référence de chemin absolu. Une référence relative qui ne commence pas par un caractère barre oblique est appelée une référence de chemin relatif.

61
Pekka 웃

Ce sont des URL indépendantes du protocole. Si la page Web est diffusée sur https, la demande utilise https, si http puis http.

Paul Irish semble les avoir popularisés en l'incluant dans son code passe-partout.

30
meder omuraliev

Sachez qu'il n'est pas seulement http ou https indépendant, mais également fichier , ftp , etc.

Cela signifie que si vous ouvrez . Htm fichier directement dans votre navigateur sur localhost, le navigateur résoudra // comme protocole de fichier et votre page ne fonctionnera pas. Cela peut causer des problèmes dans des sites Web emballés en tant qu'application "native" utilisant des outils comme Electron, PhoneGap, etc.

Exemple:

<script src="//mywebsite.com/resource.js"></script>

à

<script src="file://mywebsite.com/resource.js"></script>
1
lukyer