Absolute vs relative URLs

214

Ich möchte die Unterschiede zwischen diesen beiden Arten von URLs kennen: relative URLs (für Bilder, CSS-Dateien, JS-Dateien usw.) und absolute URLs.

Welches ist außerdem besser zu verwenden?

Haim Evgi
quelle

Antworten:

191

Im Allgemeinen wird die Verwendung relativer URLs als bewährte Methode angesehen, damit Ihre Website nicht an die Basis-URL gebunden ist, unter der sie derzeit bereitgestellt wird. Beispielsweise kann es sowohl auf localhost als auch auf Ihrer Public Domain ohne Änderungen arbeiten.

Daniel Vassallo
quelle
6
+1 Ich stimme zu. Es kann (einige) Male geben, in denen absolute URLs besser sind, beispielsweise bei Verwendung eines CDN oder wenn Sie die Inhaltswebsite ändern müssen. Die Suche nach einem Domainnamen ist meiner Meinung nach viel einfacher als die Suche nach relativen URLs.
Sune Rievers
67
Für Wartungszwecke kann es einfacher sein, absolute URLs ohne den Domainnamen zu verwenden. dh Verwenden Sie in StackOverflow die absolute URL '/ question / 2005079 / absolute-vs-relative-urls', um auf diese Frage zu verlinken. Das '/' auf der Vorderseite macht die URL absolut. Dieser Ansatz zahlt sich aus, wenn Sie Ihre Dateien verschieben oder die Verzeichnisstruktur Ihres Projekts ändern.
Mike
10
@ Baumr Aber kannst du das machen? Ich bin definitiv ein Fan / Befürworter dieser Methode, aber in einen größeren Rahmen zu geraten und große Umgestaltungen sind eine notorisch entmutigende / erschreckende Aufgabe. Obwohl Sie dachten, Sie hätten sie möglicherweise alle gewechselt, selbst in einer intelligenten IDE, können sie häufig übersehen werden, wenn sie in Zeichenfolgen codiert oder dynamisch erstellt werden. Das Schlimmste daran ist, dass diese
fehlenden
31
@Mike warum nennst du root-relative URLs "absolut"?
Törzsmókus
4
@ törzsmókus gute frage. Es lässt mich nicht bearbeiten und das war vor Jahren, bevor ich überhaupt auf den Begriff Root Relative stieß.
Mike
237

Soll ich absolute oder relative URLs verwenden?

Wenn mit absoluten URLs URLs gemeint sind, einschließlich Schema (z. B. http / https) und Hostname (z. B. yourdomain.com), tun Sie dies niemals (für lokale Ressourcen), da die Wartung und das Debuggen schrecklich sein wird.

Angenommen, Sie haben überall in Ihrem Code eine absolute URL verwendet <img src="http://yourdomain.com/images/example.png">. Was wird nun passieren, wenn Sie gehen:

  • zu einem anderen Schema wechseln (zB http -> https)
  • Domainnamen wechseln (test.yourdomain.com -> yourdomain.com)

Im ersten Beispiel erhalten Sie Warnungen vor unsicheren Inhalten, die auf der Seite angefordert werden. Weil alle Ihre URLs fest codiert sind, um http (: //yourdomain.com/images/example.png) zu verwenden. Wenn Sie Ihre Seiten über https ausführen, erwartet der Browser, dass alle Ressourcen über https geladen werden, um zu verhindern, dass Informationen verloren gehen.

Wenn Sie Ihre Site im zweiten Beispiel live aus der Testumgebung schalten, bedeutet dies, dass alle Ressourcen weiterhin auf Ihre Testdomäne anstatt auf Ihre Live-Domäne verweisen.

Um Ihre Frage zu beantworten, ob absolute oder relative URLs verwendet werden sollen, verwenden Sie immer relative URLs (für lokale Ressourcen).

Was sind die Unterschiede zwischen den verschiedenen URLs?

Schauen wir uns zunächst die verschiedenen Arten von URLs an, die wir verwenden können:

  • http://yourdomain.com/images/example.png
  • //yourdomain.com/images/example.png
  • /images/example.png
  • images/example.png

Auf welche Ressourcen versuchen diese URLs auf dem Server zuzugreifen?

In den folgenden Beispielen gehe ich davon aus, dass die Website vom folgenden Speicherort auf dem Server ausgeführt wird /var/www/mywebsite.

http://yourdomain.com/images/example.png

Die obige (absolute) URL versucht, auf die Ressource zuzugreifen /var/www/website/images/example.png. Diese Art von URL sollten Sie immer vermeiden, wenn Sie aus dem oben genannten Grund Ressourcen von Ihrer eigenen Website anfordern. Es hat jedoch seinen Platz. Wenn Sie beispielsweise eine Website haben http://yourdomain.comund eine Ressource von einer externen Domain über http anfordern möchten, sollten Sie diese verwenden. ZB https://externalsite.com/path/to/image.png.

//yourdomain.com/images/example.png

Diese URL basiert auf dem aktuell verwendeten Schema und sollte fast immer verwendet werden, wenn externe Ressourcen (Bilder, Javascripts usw.) einbezogen werden.

Diese Art von URL verwendet das aktuelle Schema der Seite, auf der sie sich befindet. Dies bedeutet, dass Sie sich auf der Seite befinden http://yourdomain.comund sich auf dieser Seite ein Bild-Tag befindet, in <img src="//yourdomain.com/images/example.png">das die URL des Bildes aufgelöst wird http://yourdomain.com/images/example.png.
Wenn Sie auf der Seite gewesen wären http**s**://yourdomain.comund sich auf dieser Seite ein Bild-Tag befindet, wird <img src="//yourdomain.com/images/example.png">die URL des Bildes aufgelöst https://yourdomain.com/images/example.png.

Dies verhindert das Laden von Ressourcen über https, wenn sie nicht benötigt werden, und stellt automatisch sicher, dass die Ressource bei Bedarf über https angefordert wird .

Die obige URL wird auf der Serverseite auf dieselbe Weise aufgelöst wie die vorherige URL:

Die obige (absolute) URL versucht, auf die Ressource zuzugreifen /var/www/website/images/example.png.

/images/example.png

Für lokale Ressourcen ist dies die bevorzugte Art, sie zu referenzieren. Dies ist eine relative URL, die auf dem Dokumentstamm ( /var/www/mywebsite) Ihrer Website basiert . Dies bedeutet , wenn Sie haben <img src="/images/example.png">es immer lösen zu /var/www/mywebsite/images/example.png.

Wenn Sie sich irgendwann für einen Domainwechsel entscheiden, funktioniert dies weiterhin, da es relativ ist.

images/example.png

Dies ist auch eine relative URL, obwohl sie sich etwas von der vorherigen unterscheidet. Diese URL ist relativ zum aktuellen Pfad. Dies bedeutet, dass es in verschiedene Pfade aufgelöst wird, je nachdem, wo Sie sich auf der Site befinden.

Wenn Sie sich beispielsweise auf der Seite befinden http://yourdomain.comund diese verwenden, wird <img src="images/example.png">sie auf dem Server /var/www/mywebsite/images/example.pngwie erwartet aufgelöst. Wenn Sie sich jedoch auf der Seite befinden http://yourdomain.com/some/pathund genau dasselbe Image-Tag verwenden, wird sie plötzlich aufgelöst /var/www/mywebsite/some/path/images/example.png.

Wann was verwenden?

Wenn Sie externe Ressourcen anfordern, möchten Sie höchstwahrscheinlich eine URL relativ zum Schema verwenden (es sei denn, Sie möchten ein anderes Schema erzwingen), und wenn Sie mit lokalen Ressourcen arbeiten, möchten Sie relative URLs basierend auf dem Dokumentstamm verwenden.

Ein Beispieldokument:

<!DOCTYPE html>
<html>
    <head>
        <title>Example</title>
        <link href='//fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700' rel='stylesheet' type='text/css'>
        <link href="/style/style.css" rel="stylesheet" type="text/css" media="screen"></style>
    </head>
    <body>
        <img src="/images/some/localimage.png" alt="">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
    </body>
</html>

Einige (irgendwie) Duplikate

PeeHaa
quelle
2
Lädt die Verwendung absoluter URLs die Seite schneller als die Verwendung relativer URLs? (
Gibt es
2
Jeder mögliche Unterschied wäre so gering, dass Sie sich keine Sorgen machen sollten, wenn er überhaupt messbar ist.
PeeHaa
3
Ein Beispiel für die Aufnahme von Google Jquery als protokolllos: <script src = "// ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> </ script>
shasi kanth
8
Bei dieser Antwort wird davon ausgegangen, dass absolute URLs nicht dynamisch generiert werden, wodurch jedes erwähnte Problem gelöst wird.
Keine
2
J. Geld ist richtig. Moderne Web-Frameworks haben den Begriff "Reverse Routing", mit dem Sie URLs von einer Ihrer Seiten zu einer anderen Ihrer Seiten erstellen können (es muss sich um eine andere Seite auf derselben Website handeln). Mit diesen können Sie einer URL einen Namen geben und diesen Namen anstelle der URL verwenden. Auf diese Weise können Sie die URL an einer Stelle ändern, wenn Sie sie jemals ändern möchten, da Sie überall sonst nur mit ihrem Namen auf diese URL verweisen.
Kevin Wheeler
65

Siehe hierzu: http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax

foo://username:[email protected]:8042/over/there/index.dtb;type=animal?name=ferret#nose
\ /   \________________/\_________/ \__/            \___/ \_/ \_________/ \_________/ \__/
 |           |               |       |                |    |       |           |       |
 |       userinfo         hostname  port              |    |       parameter query  fragment
 |    \_______________________________/ \_____________|____|____________/
scheme                  |                               | |  |
 |                authority                           |path|
 |                                                    |    |
 |            path                       interpretable as filename
 |   ___________|____________                              |
/ \ /                        \                             |
urn:example:animal:ferret:nose               interpretable as extension

Eine absolute URL enthält die Teile vor dem Teil "Pfad" - mit anderen Worten, sie enthält das Schema (das httpIn http://foo/bar/baz) und den Hostnamen (das fooIn http://foo/bar/baz) (und optional Port, Benutzerinfo und Port).

Relative URLs beginnen mit einem Pfad.

Absolute URLs sind absolut: Der Speicherort der Ressource kann nur anhand der URL selbst aufgelöst werden. Eine relative URL ist in gewisser Weise unvollständig: Um sie aufzulösen, benötigen Sie das Schema und den Hostnamen. Diese werden normalerweise aus dem aktuellen Kontext übernommen. Zum Beispiel auf einer Webseite unter

http://myhost/mypath/myresource1.html

Sie könnten einen Link wie diesen setzen

<a href="pages/page1">click me</a>

Im hrefAttribut des Links wird eine relative URL verwendet, und wenn darauf geklickt wird, muss sie aufgelöst werden, um ihr zu folgen. In diesem Fall ist der aktuelle Kontext

http://myhost/mypath/myresource1.html

Daher werden das Schema, der Hostname und der führende Pfad von diesen genommen und vorangestellt pages/page1, was ergibt

http://myhost/mypath/pages/page1

Wenn der Link gewesen wäre:

<a href="/pages/page1">click me</a>

(Beachten Sie das /Erscheinen am Anfang der URL) Dann wäre es gelöst worden als

http://myhost/pages/page1

weil der führende /die Wurzel des Hosts angibt.

In einer Webanwendung würde ich empfehlen, relative URLs für alle Ressourcen zu verwenden, die zu Ihrer App gehören. Auf diese Weise funktioniert alles weiter, wenn Sie den Speicherort der Seiten ändern. Alle externen Ressourcen (können Seiten sein, die vollständig außerhalb Ihrer Anwendung liegen, aber auch statische Inhalte, die Sie über ein Netzwerk zur Bereitstellung von Inhalten bereitstellen) sollten immer auf die Verwendung absoluter URLs hingewiesen werden: Wenn Sie dies nicht tun, gibt es einfach keine Möglichkeit, sie zu finden, da sie vorhanden sind befinden sich auf einem anderen Server.

Roland Bouman
quelle
9
Relative URLs müssen nicht mit dem URL-Pfad beginnen. //example.com/…, ?foobarund #foobarsind auch relative URLs und beginnen nicht mit dem URL-Pfad (na gut, denn ?foobarSie können sagen, dass er mit einem leeren Pfad beginnt ).
Gumbo
@Gumbo, werden //example.com/…URLs vom Typ "relativ" genannt? das ist neu für mich
Törzsmókus
3
@ törzsmókus In Bezug auf RFC 2396 : „Relative URI-Referenzen unterscheiden sich von absoluten URI dadurch, dass sie nicht mit einem Schemanamen beginnen.“
Gumbo
50

Angenommen, wir erstellen eine Unterwebsite, deren Dateien sich im Ordner http://site.ru/shop befinden .

1. Absolute URL

Link to home page
href="http://sites.ru/shop/"

Link to the product page
href="http://sites.ru/shop/t-shirts/t-shirt-life-is-good/"

2. Relative URL

Link from home page to product page
href="t-shirts/t-shirt-life-is-good/"

Link from product page to home page
href="../../"

Die relative URL sieht zwar kürzer aus als die absolute, aber die absoluten URLs sind vorzuziehen, da ein Link auf jeder Seite der Website unverändert verwendet werden kann.

Zwischenfälle

Wir haben zwei Extremfälle betrachtet: "absolut" absolute und "absolut" relative URLs. Aber alles ist relativ in dieser Welt. Dies gilt auch für URLs. Jedes Mal, wenn Sie über die absolute URL sprechen, sollten Sie immer relativ zu was angeben.

3. Protokollbezogene URL

Link to home page
href="//sites.ru/shop/"

Link to product page
href="//sites.ru/shop/t-shirts/t-shirt-life-is-good/"

Google empfiehlt eine solche URL. Nun wird jedoch allgemein angenommen, dass http: // und https: // unterschiedliche Sites sind.

4. Root-relative URL

Dh relativ zum Stammordner der Domain.

Link to home page
href="/shop/"

Link to product page
href="/shop/t-shirts/t-shirt-life-is-good/"

Es ist eine gute Wahl, wenn sich alle Seiten innerhalb derselben Domain befinden. Wenn Sie Ihre Site in eine andere Domain verschieben, müssen Sie den Domainnamen in den URLs nicht massenhaft ersetzen.

5. Basisbezogene URL (Homepage-relativ)

Das Tag <Basis> gibt die Basis-URL an, die automatisch allen relativen Links und Ankern hinzugefügt wird. Das Basis-Tag wirkt sich nicht auf absolute Links aus. Als Basis-URL geben wir die Homepage an: <base href = "http://sites.ru/shop/">.

Link to home page
href=""

Link to product page
href="t-shirts/t-shirt-life-is-good/"

Jetzt können Sie Ihre Site nicht nur in eine beliebige Domain, sondern in einen beliebigen Unterordner verschieben. Denken Sie daran, dass URLs zwar relativ aussehen, aber tatsächlich absolut sind. Achten Sie besonders auf Anker. Um innerhalb der aktuellen Seite zu navigieren, müssen wir href = "T-Shirts / T-Shirt-Leben-ist-gut / # Kommentare" nicht href = "# Kommentare" schreiben. Letzteres wird auf der Homepage geworfen.

Fazit

Für interne Links verwende ich basenbezogene URLs (5). Für externe Links und Newsletter verwende ich absolute URLs (1).

Vlad Alivanov
quelle
1
gute Antwort. Schade, dass es auf der Seite zu tief bleibt, als dass die Leute es sehen könnten. beantwortet viele Kommentare zu anderen Antworten.
Oligofren
24

Es gibt wirklich drei Typen, die explizit diskutiert werden sollten. In der Praxis wurden URLs zwar abstrahiert, um auf einer niedrigeren Ebene behandelt zu werden, und ich würde sogar sagen, dass Entwickler ihr ganzes Leben lang durchlaufen könnten, ohne eine einzige URL von Hand zu schreiben.

Absolut

Absolute URLs binden Ihren Code an das Protokoll und die Domain. Dies kann mit dynamischen URLs überwunden werden.

<a href=“https://dev.example.com/a.html?q=”>https://dev.example.com/a.html?q=</a>

Absolute Vorteile:

  1. Steuerung - Die Subdomain und das Protokoll können gesteuert werden. Personen, die durch eine dunkle Subdomain eintreten, werden in die richtige Subdomain geleitet. Sie können je nach Bedarf zwischen sicher und nicht sicher hin und her springen.

  2. Konfigurierbar - Entwickler lieben es, wenn Dinge absolut sind. Sie können ordentliche Algorithmen entwerfen, wenn Sie absolute URLs verwenden. URLs können konfigurierbar gemacht werden, sodass eine URL mit einer einzigen Änderung in einer einzigen Konfigurationsdatei standortweit aktualisiert werden kann.

  3. Hellsehen - Sie können nach Personen suchen, die Ihre Website durchsuchen, oder zusätzliche externe Links abrufen.


Wurzelverwandter

Relative Root-URLs binden Ihren Code an die Basis-URL. Dies kann mit dynamischen URLs und / oder Basis-Tags überwunden werden .

<a href=“/index.php?q=”>.example.com/index.php?q=</a>

Root Relative Pros:

  1. Konfigurierbar - Das Basis-Tag macht sie relativ zu jedem Stamm, den Sie auswählen, und erleichtert das Wechseln von Domänen und das Implementieren von Vorlagen.

Relativ

Relative URLs binden Ihren Code an die Verzeichnisstruktur. Es gibt keine Möglichkeit, dies zu überwinden. Relative URLs sind nur in Dateisystemen zum Durchlaufen von Verzeichnissen oder als Verknüpfung für eine einfache Aufgabe nützlich.

<a href=“index.php?q=”>index.php?q=</a>
<link src=“../.././../css/default.css” />

Relative Nachteile:

  1. Verwirrend - Wie viele Punkte ist das? Wie viele Ordner ist das? Wo ist die Datei? Warum funktioniert es nicht?

  2. WARTUNG - Wenn eine Datei versehentlich verschoben wird, werden Ressourcen nicht mehr geladen, Links senden den Benutzer auf die falschen Seiten, Formulardaten werden möglicherweise auf die falsche Seite gesendet. Wenn eine Datei verschoben werden muss, müssen alle Ressourcen, die das Laden beenden sollen, und alle Links, die falsch sein werden, aktualisiert werden.

  3. NICHT SKALIEREN - Wenn Webseiten komplexer werden und Ansichten auf mehreren Seiten wiederverwendet werden, sind die relativen Links relativ zu der Datei, in die sie aufgenommen wurden. Wenn Sie einen HTML-Navigationsausschnitt haben, der sich auf jeder Seite befindet, ist relativ zu vielen verschiedenen Orten relativ. Das erste, was Menschen beim Erstellen einer Vorlage erkennen, ist, dass sie eine Möglichkeit zum Verwalten der URLs benötigen.

  4. COMPUTED - Sie werden von Ihrem Browser implementiert (hoffentlich gemäß RFC). Siehe Kapitel 5 in RFC3986 .

  5. HOPPLA! - Fehler oder Tippfehler können zu Spinnenfallen führen.


Die Entwicklung der Routen

Entwickler haben aufgehört, URLs in dem hier diskutierten Sinne zu schreiben. Alle Anforderungen beziehen sich auf die Indexdatei einer Website und enthalten eine Abfragezeichenfolge, auch bekannt als Route. Die Route kann als Mini-URL betrachtet werden, die Ihrer Anwendung den zu generierenden Inhalt mitteilt.

<a href="<?=Route::url('named_url', array('first' => 'my', 'last' => 'whacky'))?>">
    http://dev.example.com/index.php/my:whacky:url
</a>

Routen Vorteile:

  1. Alle Vorteile absoluter URLs.
  2. Verwendung eines beliebigen Zeichens in der URL.
  3. Mehr Kontrolle (gut für SEO).
  4. Möglichkeit, URLs algorithmisch zu generieren. Dadurch können die URLs konfiguriert werden. Das Ändern der URL ist eine einzelne Änderung in einer einzelnen Datei.
  5. Keine Notwendigkeit für 404 nicht gefunden. Fallback-Routen können eine Sitemap oder eine Fehlerseite anzeigen.
  6. Bequeme Sicherheit des indirekten Zugriffs auf Anwendungsdateien. Wachaussagen können sicherstellen, dass jeder über die richtigen Kanäle ankommt.
  7. Praktikabilität im MVC-Ansatz.

Meine Einstellung

Die meisten Menschen werden auf die eine oder andere Weise alle drei Formen in ihren Projekten verwenden. Der Schlüssel ist, sie zu verstehen und die für die Aufgabe am besten geeignete auszuwählen.

Keiner
quelle
Es fehlen protokollbezogene URLs, die strikt besser sind als vollständig absolute URLs. Absolute URLs sind beim Upgrade des Schemas (meistens auf HTTPS) problematisch. Relative URLs beheben dies.
Tobu
@Tobu Servieren Sie einfach alles über HTTPS.
Keine
Randnotiz: Es sieht so aus, als hätten Sie in den meisten der oben genannten Codebeispiele typografische Anführungszeichen verwendet. Vielleicht möchten Sie das beheben.
Domsson
Und welche Art von URL ist die mit dem Punkt zuerst? ZB "./index.html"
Narvalex
Könnten Sie etwas über Hellsehen erzählen ? Wenn Sie "Root Relative" -URLs verwenden, warum können Sie dann nicht sehen, wie Leute Ihre Website kratzen?
Lovethenakedgun
6

Wenn es für die Verwendung auf Ihrer Website vorgesehen ist, empfiehlt es sich, eine relative URL zu verwenden. Wenn Sie die Website auf einen anderen Domainnamen verschieben oder nur lokal debuggen müssen, können Sie dies tun.

Schauen Sie sich an, was Stackoverflow tut (Strg + U in Firefox):

<a href="/users/recent/90691"> // Link to an internal element

In einigen Fällen verwenden sie absolute URLs:

<link rel="stylesheet" href="http://sstatic.net/so/all.css?v=5934">

... aber dies ist nur eine bewährte Methode, um die Geschwindigkeit zu verbessern. In Ihrem Fall sieht es nicht so aus, als würden Sie so etwas tun, also würde ich mir darüber keine Sorgen machen.

marcgg
quelle
6

Ich werde hier mit der Mehrheit nicht einverstanden sein müssen.

Ich denke, das relative URL-Schema ist "in Ordnung", wenn Sie schnell etwas zum Laufen bringen und nicht über den Tellerrand hinaus denken möchten, insbesondere wenn Ihr Projekt klein ist und nur wenige Entwickler (oder nur Sie selbst) hat.

Sobald Sie jedoch anfangen, an großen, fetten Systemen zu arbeiten, in denen Sie ständig zwischen Domänen und Protokollen wechseln, halte ich einen eleganteren Ansatz für angebracht.

Wenn Sie im Wesentlichen absolute und relative URLs vergleichen, gewinnt Absolute. Warum? Weil es niemals brechen wird. Je. Eine absolute URL ist genau das, was sie verspricht. Der Haken ist, wenn Sie Ihre absoluten URLs pflegen müssen.

Der schwache Ansatz zur absoluten URL-Verknüpfung besteht darin, die gesamte URL hart zu codieren. Keine gute Idee und wahrscheinlich der Schuldige, warum die Leute sie als gefährlich / böse / nervig ansehen. Ein besserer Ansatz ist es, sich einen einfach zu verwendenden URL-Generator zu schreiben. Diese sind einfach zu schreiben und können unglaublich sein leistungsfähig sein - sie erkennen Ihr Protokoll automatisch, sind einfach zu konfigurieren (stellen Sie die URL für die gesamte App buchstäblich einmal ein) usw. und injizieren Ihre Domain von selbst. Das Schöne daran: Sie codieren weiterhin mit relativen URLs, und zur Laufzeit fügt die Anwendung Ihre URLs im laufenden Betrieb als vollständig absolut ein. Genial.

Angesichts der Tatsache, dass praktisch alle modernen Websites ein dynamisches Back-End verwenden, ist es im besten Interesse dieser Website, dies auf diese Weise zu tun. Absolute URLs stellen nicht nur sicher, wohin sie verweisen, sondern können auch die SEO-Leistung verbessern.

Ich könnte hinzufügen, dass das Argument, dass absolute URLs die Ladezeit der Seite irgendwie verändern werden, ein Mythos ist. Wenn Ihre Domain mehr als ein paar Bytes wiegt und Sie in den 1980er Jahren ein DFÜ-Modem verwenden, ist dies sicher. Das ist aber einfach nicht mehr der Fall. https://stackoverflow.com/ ist 25 Byte groß, während die Datei "topbar-sprite.png", die sie für den Navigationsbereich der Site verwenden, 9+ KB wiegt. Das bedeutet, dass die zusätzlichen URL-Daten im Vergleich zur Sprite-Datei 0,2% der geladenen Daten ausmachen und diese Datei nicht einmal als großer Leistungseinbruch angesehen wird.

Dieses große, nicht optimierte, ganzseitige Hintergrundbild verlangsamt viel eher Ihre Ladezeiten.

Ein interessanter Beitrag darüber, warum relative URLs nicht verwendet werden sollten, ist hier: http://yoast.com/relative-urls-issues/

Ein Problem, das beispielsweise bei Verwandten auftreten kann, ist, dass Serverzuordnungen (wohlgemerkt bei großen, durcheinandergebrachten Projekten) manchmal nicht mit Dateinamen übereinstimmen und der Entwickler möglicherweise eine relative URL annimmt, die dies einfach nicht ist wahr. Ich habe das heute bei einem Projekt gesehen, an dem ich gerade arbeite, und es hat eine ganze Seite heruntergebracht.

Oder vielleicht hat ein Entwickler vergessen, einen Zeiger zu wechseln, und plötzlich hat Google Ihre gesamte Testumgebung indiziert. Whoops - doppelte Inhalte (schlecht für SEO!).

Absolute können gefährlich sein, aber wenn sie richtig und auf eine Weise verwendet werden, die Ihren Build nicht kaputt macht, sind sie nachweislich zuverlässiger. Schauen Sie sich den Artikel oben an, der eine Reihe von Gründen enthält, warum der Wordpress-URL-Generator super toll ist.

:) :)

Dudewad
quelle
1
Wenn Sie absolute URL sagen, meinen Sie damit die vollständige URL oder die /Verknüpfung mit dem Basispfad? dh /products/wallets/thing.htmlim Gegensatz zu thing.htmlim Gegensatz zuhttp://www.myshop.com/products/wallets/thing.html
Bradley Flood
Ich glaube, das Voranstellen mit einem "/" wird immer relativ zum Domain-Stamm sein. Wenn Ihre Domain also "www.example.com" lautet, werden alle als "/image1.jpg" codierten Verweise als "www.example.com/image1.jpg" interpretiert. Elemente ohne den führenden Schrägstrich werden als relativ zum Anforderungsstamm interpretiert. Wenn ich "absolute URL" sage, meine ich die vollqualifizierte URL. Ich erschrecke, um MSDN-Links über das Internet zu senden, aber dies ist eigentlich eine ziemlich gute Aufschlüsselung: msdn.microsoft.com/en-us/library/windows/desktop/…
dudewad
Dies ist die derzeitige Best Practice, obwohl viele Leute sie noch nicht erkannt haben. Ich liebe Routen, wie zum Beispiel in Kohana, wo Sie echo Route::url('route_name')eine absolute URL unter Verwendung der Site-URL und Routeninformationen mit der Option erstellen können , diese über HTTPS zu erstellen.
Keine
Ich muss darauf hinweisen, dass DFÜ-Modems in den 80er Jahren nicht zurückgelassen wurden. Es gibt jetzt viele Leute, die keine andere Wahl haben als Einwahl oder überteuertes, sehr begrenztes Satelliten-Internet ... und wenn Sie arm sind, was könnte besser sein als kostenlose Einwahl? Es stört mich wirklich, Entwickler zu sehen, die glauben, dass es keine Einwahl mehr gibt. Es kann 5-10 Minuten (!!!) dauern, bis ich mich bei der Einwahl auf der Website meiner Bank anmelde ... Paypal, Amazon und Ebay sind nicht viel besser. Egg Cave (eine virtuelle Haustier-Website) und Facebook funktionieren bei der Einwahl einfach nicht. Das betrifft viele Menschen, die in ländlichen Gebieten leben.
Kat Cox
Okay, ja, während einige Leute sich einwählen, ist die überwiegende Mehrheit der Benutzer nicht in der Einwahl. Es hat auch viel mit der Demografie zu tun. Wenn Sie nach riesigen, extrem leistungsfähigen Ergebnissen suchen, schneiden Sie Ihre Domain von Ihrer URL ab. Der Hauptpunkt dieses Kommentars war jedoch, zu unterstreichen, dass die Leistung normalerweise in anderen Bereichen zu finden ist. Sie können die gesamte Übertragungszeit, die Sie in URL-Bytes verloren haben, gewinnen, indem Sie ein einzelnes Bild optimieren. Aber wenn 20% oder mehr Ihrer Benutzer sich einwählen, ist das wahrscheinlich wichtig. Im Jahr 2015 und für alle praktischen Zwecke ist dies einfach nicht der Fall.
Dudewad
4

In den meisten Fällen sind relative URLs der richtige Weg. Sie sind von Natur aus portabel. Wenn Sie also Ihre Site anheben und an einer Stelle platzieren möchten, an der sie sofort funktioniert, werden möglicherweise Stunden des Debuggens reduziert.

Es gibt einen ziemlich anständigen Artikel über absolute und relative URLs .

Ben Everard
quelle
4

Ein URL , die beginnt , mit dem URL - Schema und Schema spezifischen Teil ( http://, https://, ftp://, etc.) ist eine absolute URL.

Jede andere URL ist eine relative URL und benötigt eine Basis-URL, von der die relative URL aufgelöst wird (und daher davon abhängt). Dies ist die URL der Ressource, in der die Referenz verwendet wird, sofern nicht anders angegeben.

In RFC 2396 - Anhang C finden Sie Beispiele zum Auflösen relativer URLs.

Gumbo
quelle
3

Angenommen, Sie haben eine Website www.yourserver.com. Im Stammverzeichnis für Webdokumente haben Sie ein Unterverzeichnis für Bilder und darin haben Sie myimage.jpg.

Eine absolute URL definiert den genauen Speicherort des Dokuments, zum Beispiel:

http://www.yourserver.com/images/myimage.jpg

Eine relative URL definiert den Speicherort relativ zum aktuellen Verzeichnis . Angenommen, Sie befinden sich im Stammwebverzeichnis, in dem sich Ihr Bild befindet:

images/myimage.jpg

(relativ zu diesem Stammverzeichnis)

Sie sollten nach Möglichkeit immer relative URLs verwenden. Wenn Sie die Website auf www.anotherserver.com verschieben, müssen Sie alle absoluten URLs aktualisieren, die auf www.yourserver.com verweisen. Die relativen URLs funktionieren einfach so, wie sie sind.

Paolo
quelle
0

Für jedes System, das die relative URI-Auflösung unterstützt, dienen sowohl relative als auch absolute URIs demselben Ziel: Referenzierung. Und sie können austauschbar verwendet werden. Sie können also jeweils anders entscheiden. Technisch bieten sie die gleiche Referenzierung.

Um genau zu sein, gibt es für jeden relativen URI bereits einen absoluten URI. Und das ist der Basis-URI, gegen den der relative URI aufgelöst wird. Ein relativer URI ist also tatsächlich ein Merkmal zusätzlich zu den absoluten URIs.

Und deshalb können Sie mit relativen URIs mehr tun als mit einem absoluten URI allein - dies ist besonders wichtig für statische Websites, deren Pflege im Vergleich zu absoluten URIs sonst nicht so flexibel wäre.

Diese positiven Effekte der relativen URI-Auflösung können auch für die dynamische Entwicklung von Webanwendungen genutzt werden. Die von absoluten URIs eingeführten Inflexibilitäten sind in einer dynamischen Umgebung auch leichter zu bewältigen. Daher entscheiden sich einige Entwickler, die sich über die URI-Auflösung und die ordnungsgemäße Implementierung und Verwaltung nicht sicher sind (nicht, dass dies immer einfach ist), häufig für die Verwendung von Absolut URIs in einem dynamischen Teil einer Website, da sie andere dynamische Funktionen (z. B. Konfigurationsvariable mit dem URI-Präfix) einführen können, um die Inflexibilität zu umgehen.

Was ist dann der Vorteil bei der Verwendung absoluter URIs? Technisch gibt es das nicht, aber eines würde ich sagen: Relative URIs sind komplexer, weil sie gegen den sogenannten absoluten Basis-URI aufgelöst werden müssen. Selbst wenn die Auflösung seit Jahren streng definiert ist, können Sie einen Client überfahren, der einen Fehler in der URI-Auflösung aufweist. Da absolute URIs keine Auflösung benötigen, besteht bei Verwendung absoluter URIs kein Risiko, dass bei der relativen URI-Auflösung ein fehlerhaftes Clientverhalten auftritt. Wie hoch ist das Risiko eigentlich? Nun, es ist sehr selten. Ich kenne nur einen Internetbrowser, bei dem ein Problem mit der relativen URI-Auflösung aufgetreten ist. Und das war nicht allgemein, sondern nur in einem sehr (obskuren) Fall.

Neben dem HTTP-Client (Browser) ist es für einen Autor von Hypertext-Dokumenten oder Code möglicherweise auch komplexer. Hier hat der absolute URI den Vorteil, dass er einfacher zu testen ist, da Sie ihn einfach so wie er ist in die Adressleiste Ihres Browsers eingeben können. Wenn es sich jedoch nicht nur um Ihre einstündige Arbeit handelt, ist es für Sie meistens von größerem Vorteil, die absolute und relative URI-Behandlung tatsächlich zu verstehen, damit Sie die Vorteile der relativen Verknüpfung tatsächlich nutzen können.

hakre
quelle
-4

Ich würde von Herzen relative URLs empfehlen, um Bits derselben Site auf andere Bits derselben Site zu verweisen.

Vergessen Sie nicht, dass für eine Änderung von HTTPS - auch wenn Sie sich auf derselben Site befinden - eine absolute URL erforderlich ist.

Dougal
quelle