Ich habe folgendes Element:
<script type="text/javascript" src="https://cdn.example.com/js_file.js"></script>
In diesem Fall ist die Site HTTPS, aber die Site kann auch nur HTTP sein. (Die JS-Datei befindet sich in einer anderen Domäne.) Ich frage mich, ob es aus praktischen Gründen gültig ist, Folgendes zu tun:
<script type="text/javascript" src="//cdn.example.com/js_file.js"></script>
Ich frage mich, ob es gültig ist, das http:
oder zu entfernen https:
?
Es scheint überall zu funktionieren, wo ich es getestet habe, aber gibt es Fälle, in denen es nicht funktioniert?
Antworten:
Eine relative URL ohne Schema (http: oder https :) ist gemäß RFC 3986 gültig : "URI (Uniform Resource Identifier): Generic Syntax", Abschnitt 4.2 . Wenn ein Client daran erstickt, ist dies die Schuld des Clients, da er die im RFC angegebene URI-Syntax nicht einhält.
Ihr Beispiel ist gültig und sollte funktionieren. Ich habe diese relative URL-Methode selbst auf stark frequentierten Websites verwendet und hatte keine Beschwerden. Außerdem testen wir unsere Websites in Firefox, Safari, IE6, IE7 und Opera. Diese Browser verstehen alle dieses URL-Format.
quelle
Es funktioniert garantiert in jedem Mainstream-Browser (ich berücksichtige keine Browser mit einem Marktanteil von weniger als 0,05%). Heck, es funktioniert in Internet Explorer 3.0.
RFC 3986 definiert einen URI aus folgenden Teilen:
Wenn Sie relative URIs definieren ( Abschnitt 5.2 ), können Sie jeden dieser Abschnitte weglassen, immer von links beginnend. Im Pseudocode sieht es so aus:
Der von Ihnen beschriebene URI ist ein schemaloser relativer URI.
quelle
Wenn die übergeordnete Seite von geladen wurde
file://
, funktioniert sie wahrscheinlich nicht (es wird versucht, sie abzurufenfile://cdn.example.com/js_file.js
, was Sie natürlich auch lokal bereitstellen können).quelle
script src="//..."
nicht funktionierte! Ich habe die HTML-Datei lokal geöffnet!Viele Leute nennen dies eine protokollrelative URL.
Dies führt zu einem doppelten Download von CSS-Dateien in IE 7 und 8 .
quelle
Hier dupliziere ich die Antwort in Versteckte Funktionen von HTML :
quelle
Es ist absolut gültig, das Protokoll wegzulassen. Die URL-Spezifikation ist seit Jahren sehr klar, und ich habe noch keinen Browser gefunden, der sie nicht versteht. Ich weiß nicht, warum diese Technik nicht besser bekannt ist. Es ist die perfekte Lösung für das heikle Problem, HTTP / HTTPS-Grenzen zu überschreiten. Mehr hier: HTTP-https-Übergänge und relative URLs
quelle
Nur um dies in den Mix zu werfen, wenn Sie auf einem lokalen Server entwickeln, funktioniert es möglicherweise nicht. Sie benötigen ein Programm angeben, sonst wird der Browser davon ausgehen kann , dass
src="//cdn.example.com/js_file.js"
istsrc="file://cdn.example.com/js_file.js"
, was zu brechen , da Sie nicht auf diese Ressource lokal Hosting.Microsoft Internet Explorer scheint hierfür besonders sensibel zu sein. Siehe folgende Frage: jQuery kann nicht in Internet Explorer auf localhost (WAMP) geladen werden.
Sie würden wahrscheinlich immer versuchen, eine Lösung zu finden, die in all Ihren Umgebungen mit den geringsten erforderlichen Änderungen funktioniert.
Die von HTML5Boilerplate verwendete Lösung besteht darin, einen Fallback zu haben, wenn die Ressource nicht korrekt geladen ist. Dies funktioniert jedoch nur, wenn Sie eine Prüfung einbinden :
UPDATE: HTML5Boilerplate wird jetzt verwendet,
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
nachdem entschieden wurde, protokollbezogene URLs zu verwerfen (siehe [hier] [3]).quelle
In Anlehnung an den Gnud-Verweis heißt es in Abschnitt 5.2 des RFC 3986 :
Also
//
ist richtig :-)quelle
Ja, dies ist in RFC 3986 , Abschnitt 5.2 dokumentiert :
(Bearbeiten: Ups, meine RFC-Referenz war veraltet).
quelle
Es ist in der Tat richtig, wie andere Antworten angegeben haben. Sie sollten jedoch beachten, dass einige Webcrawler 404s für diese auslösen, indem sie sie auf Ihrem Server wie eine lokale URL anfordern. (Sie ignorieren den doppelten Schrägstrich und behandeln ihn als einfachen Schrägstrich).
Möglicherweise möchten Sie auf Ihrem Webserver eine Regel einrichten, um diese abzufangen und umzuleiten.
Mit Nginx würden Sie beispielsweise Folgendes hinzufügen:
Beachten Sie jedoch, dass Sie, wenn Sie Punkte in Ihren URIs verwenden, die Spezifität erhöhen müssen, da diese Seiten sonst in nicht vorhandene Domänen umgeleitet werden.
Dies ist auch ein ziemlich massiver Regex, der für jede Abfrage ausgeführt werden muss. Meiner Meinung nach lohnt es sich, nicht konforme Browser mit 404s zu bestrafen, wenn die meisten kompatiblen Browser einen (leichten) Leistungseinbruch erleiden.
quelle
Wir sehen 404 Fehler in unseren Protokollen, wenn wir //somedomain.com als Verweise auf JS-Dateien verwenden.
Die Referenzen, die die 404s verursachen, sehen folgendermaßen aus: ref:
404 Anfrage:
Da diese regelmäßig in unseren Webserver-Protokollen angezeigt werden, kann man mit Sicherheit sagen: Alle Browser und Bots berücksichtigen RFC 3986, Abschnitt 4.2, NICHT . Am sichersten ist es, wenn möglich, das Protokoll einzuschließen.
quelle
1. Zusammenfassung
Antwort für 2019: Sie können weiterhin protokollbezogene URLs verwenden, diese Technik ist jedoch ein Anti-Pattern .
Ebenfalls:
Eine Migration von protokollbezogenen URLs zu
https://
diesen wäre schön.2. Relevanz
Diese Antwort ist für Januar 2019 relevant. In Zukunft sind die Daten dieser Antwort möglicherweise veraltet.
3. Anti-Muster
3.1. Argumentation
Paul Irish - Front-End-Ingenieur und Entwickleranwalt für Google Chrome - schreibt im Dezember 2014 :
3.2. Ein weiterer Link
3.3. Beispiele
https
4. Entwicklungsprozess
Zum Beispiel versuche ich, Clean-Console zu verwenden .
KiraCleanConsole__cdn_links_demo.html
:Verknüpfung
//cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
ist gültig, aber ich erhalte eine Fehlermeldung.Achten Sie auf
file://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
und lesen Thilo und bg17aw Antworten zufile://
.Ich wusste nichts über dieses Verhalten und konnte nicht verstehen, warum ich solche Probleme für Pager habe .
5. Tools von Drittanbietern
Ich verwende Clickable URLs Sublime Text-Paket. Verwenden Sie es, ich kann einfach Links aus meinem Texteditor im Browser öffnen.
Beide Links im Beispiel sind gültig. Aber der erste Link, den ich erfolgreich im Browser öffnen kann, verwendet klickbare URLs, der zweite Link - nein. Dies ist möglicherweise nicht sehr praktisch.
6. Fazit
Ja:
Developing process
Artikel haben, können Sie Ihren Entwicklungsworkflow festlegen.Third-party tools
Artikel, können Sie Werkzeuge beitragen.Diese zusätzlichen Probleme benötigen Sie jedoch nicht. Lesen Sie Informationen über Links im
Anti-pattern
Element: Protokollbezogene URLs sind veraltet.quelle
Das Muster, das ich auf HTML5-Boilerplate sehe, ist:
Es läuft auf verschiedenen Systemen wie
http
,https
,file
.quelle
https://
für alleshttps://
überall ist, dass Sie dann alle Ihre externen Links überprüfen müssen, um festzustellen , ob sie dies tatsächlich unterstützen, und sie ändern müssen,http://
wenn dies nicht der Fall ist (da sie sonst nicht funktionieren). Dies kann bei einer großen Anzahl von Links problematisch sein.https://
sie in allen Links verwendet werden sollten (oder können), was nicht korrekt ist.Da Ihr Beispiel die Verknüpfung mit einer externen Domäne ist, sollten Sie bei Verwendung von HTTPS überprüfen, ob die externe Domäne auch für SSL eingerichtet ist. Andernfalls werden Ihren Benutzern möglicherweise SSL- und / oder 404-Fehler angezeigt (z. B. speichern ältere Versionen von Plesk HTTP und HTTPS in separaten Ordnern). Für CDNs sollte es kein Problem sein, aber für jede andere Website könnte es sein.
Nebenbei bemerkt, getestet während der Aktualisierung einer alten Website und funktioniert auch im url = Teil eines META REFRESH.
quelle