web-dev-qa-db-de.com

Hinzufügen von Links: Kann ich // domain (doppelter Schrägstrich) für https: // und http: // verwenden?

Wir ziehen bald zu https um. Ich verstehe, dass es klug ist, //domain.com Links und src-Referenzen für Bilder zu verwenden.

  • Versucht der Browser dann zuerst https? und wenn nicht gefunden http?
  • Wird dies von allen Browsern unterstützt?

Müssen am Ende alle Links auf der Site //domain.com (mit doppeltem Schrägstrich) verwenden?

Und versteht (und befolgt) Google //domain.com Links?

6
snh_nl

Browser versuchen nicht ein Protokoll und greifen dann auf das andere zurück. Der Browser verwendet das Protokoll, mit dem er verknüpft ist. Wenn dieses Protokoll nicht unterstützt wird, wird dem Benutzer eine Fehlermeldung angezeigt.

Wenn Sie Benutzer zwingen möchten, ein Protokoll zu verwenden, können Sie von einem zum anderen umleiten. Um beispielsweise eine sichere Verbindung auf Ihrer Site zu erzwingen, verwenden Sie die folgende Umschreiberegel in Ihrem . Htaccess . Es werden 301 Weiterleitungen von http://example.com/page.html nach https://example.com/page.html ausgegeben ( source )

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

Es hört sich so an, als ob Sie den Benutzern erlauben möchten, eines von beiden zu verwenden und sie auf dem von ihnen gewählten zu belassen. Das ist gut. Es gibt mehrere Möglichkeiten, wie Sie relative Links auf Ihrer Website formatieren können, um dies zu unterstützen. Die Verwendung von // ist nicht die, die ich empfehlen würde.

Wenn sich Ihr Benutzer in https://example.com/foo.html befindet und Sie möchten, dass er zu https://example.com/bar.html wechselt, funktioniert eines der folgenden href-Tags im a-Tag:

  • Vollständige URL - https://example.com/bar.html - Wenn sich der Benutzer auf der Site http befindet, werden sie auf die Site https übertragen.
  • Protokoll relativ - //example.com/bar.html - Der Benutzer wird entweder zu https://example.com/bar.html oder http://example.com/bar.html geleitet, je nachdem, welche Protokoll, das sie derzeit verwenden.
  • Site relative - /bar.html - Sowohl das Protokoll als auch der Domainname bleiben gleich, der gesamte Pfad in der URL ändert sich.
  • Verzeichnis relativ - bar.html - Ersetzt den Dokumentteil in der URL (alles nach dem letzten Schrägstrich)

Ich empfehle die Verwendung von Site-relativen Links, die die meiste Zeit mit einem einzelnen Schrägstrich beginnen, wenn Sie auf andere Dinge auf Ihrer Site verlinken. Wie die protokollrelativen URLs verwenden Benutzer die gleichen http oder https, die sie derzeit verwenden. Es wird viel weniger getippt (und die Seiten werden kleiner) als bei der Verwendung vollständiger URLs oder protokollbezogener URLs.

Verzeichnisrelative URLs können ebenfalls funktionieren, in einigen Fällen können sie jedoch schwierig sein:

  • Das Verknüpfen von example.com/bar/foo.html zu example.com/bar/ ist schwierig. Die verzeichnisrelative URL dafür ist ./, wobei . das aktuelle Verzeichnis bedeutet. Die relative URL der Site lautet nur /bar/.
  • Die Verknüpfung mit dem Verzeichnis erfolgt in der .. -Notation. Um also von example.com/bar/foo.html zu example.com/baz.html zu verlinken, wäre der Link ../baz.html. Der serverrelative Link wäre nur /baz.html.

Sie können verzeichnisbezogene Links verwenden, um auf andere Dokumente zu verweisen, von denen bekannt ist, dass sie sich im aktuellen Verzeichnis befinden, und website-bezogene Links verwenden, um auf JS, CSS und Bilder zu verweisen, die sich normalerweise im Stammverzeichnis der Website oder in der Nähe davon befinden.

Protokollrelative Direktiven sind am nützlichsten, um Links zu anderen Sites zu erstellen, auf denen Sie das Protokoll beibehalten möchten. Ich benutze das am häufigsten für JavaScript oder Bilder von Drittanbietern. Wenn sie nicht als sicher abgerufen werden und mein Benutzer sicher ist, erhält der Benutzer eine Warnung. Wenn mein Benutzer nicht sicher ist, verlangsamt dies möglicherweise das Abrufen von Ressourcen von anderen Websites auf sichere Weise. Wenn Sie beispielsweise Währungsdaten von meiner Website zur Währungsumrechnung verwenden, können Sie einen Link zu deren Drittanbieter-JavaScript wie <script src="//coinmill.com/frame.js"></script> erstellen.

Alle modernen Browser und Suchmaschinen unterstützen alle diese Arten von Links.

9

// bedeutet im Grunde, dass eine Ressource im selben Protokoll angefordert wird. Wenn also jemand httpS://yourwebsite.com durchsucht und Sie ein Stylesheet wie //yourwebsite.com/style.css einbinden, wird httpS://yourwebsie.com/style.css geladen. .

Wenn Sie Ressourcen von http anfordern, während die Seite https ist, gibt der Browser möglicherweise einen Fehler aus.

Um Ihre Fragen zu beantworten:

Versucht der Browser dann zuerst https? und wenn nicht http gefunden?

Nein, wenn der // nicht gefunden wird, wird nur der ausreichende HTTP-Statuscode zurückgegeben.

Wird dies von allen Browsern unterstützt?

Soweit ich weiß, wird dies von allen Browsern unterstützt, aber nimm nicht mein Wort dafür ...

3
William Edwards

Unter https://developers.google.com/speed/libraries/devguide empfiehlt Google, <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> zu verwenden, um beispielsweise eine Verknüpfung zu jQuery herzustellen. Google hostet die jQuery-Bibliotheken unter http und https. Der Browser verwendet dasselbe Protokoll, mit dem Sie auf Ihre Website gelangt sind, um den enthaltenen JavaScript-Code abzurufen. Es wird nicht das eine und dann das andere probieren! Sie möchten nicht, dass die Site plötzlich unsicher wird, da eine Ressource nur über http gefunden werden kann! Dies hat den Vorteil, dass keine sichere Verbindung nur für JS verwendet wird, wenn auf Ihre Site über http zugegriffen wird, und keine Warnung angezeigt wird, dass einige Ressourcen nicht sicher sind, wenn auf Ihre Site über https zugegriffen wird.

Es ist wahrscheinlich besser, diese Methode (//domain.tld/) für externe Ressourcen zu verwenden, wenn Ihre Site von http auf https wechselt (z. B. Benutzer angemeldet/nicht angemeldet). Wenn Sie immer http verwenden, brauchen Sie es nicht, wenn Sie immer https verwenden, brauchen Sie es nicht, da Sie einfach dasselbe Protokoll in Ihre URLs fest einprogrammieren können. Dies schadet jedoch nicht.

Sie benötigen es nicht für interne Ressourcen, wenn Sie relative URLs verwenden, da der Browser dasselbe Protokoll verwendet.

2
CJ Dennis