OK Schrägstrich vor Abfrage-String zu überspringen?
-
06-07-2019 - |
Frage
Ist es sicher, den Schrägstrich immer zu überspringen, wenn eine Abfrage-Zeichenfolge anhängt?
Das heißt, kann ich
http://example.com?querystring
statt:
http://example.com/?querystring
? Alle webhosts habe ich verwendet, um Unterstützung dieses aber ist es sicher davon ausgehen, dass alle Server-Umgebungen unterstützt diese Methode wird? Ist es Standard?
Lösung
Nein. Es ist nicht richtig, den Schrägstrich überspringen Es kann arbeitet moderne Browser.. Aber das macht es nicht richtig
Siehe RFC1738 - URL und RFC2396 - URI
.Das Format pro RFC1738 (Ich habe das Schema-Format hier nicht inbegriffen):
//
: @ : /
Und es geht weiter zu beachten, dass:
... der "/" zwischen dem Host (oder Hafen) und dem URL-Pfad ist nicht Teil des URL-Pfades.
In diesem Fall der "?" Teil des URL-Pfades ist, die
... ist abhängig von der Regelung verwendet wird, wie die Art und Weise tut, in der sie interpretiert wird.
Beachten Sie auch, dass pro-Spezifikation, es perfekt gültig ist auslassen "/ url-path." - beachten Sie, dass die "/" explicit war in diesem Fall enthalten
So "foo.com?bar" ist ungültig, weil es kein "/" vor dem URL-Pfad ist.
Andere Tipps
Als eine Frage der modernen spec, ja ist es zulässig, den Schrägstrich , im Gegensatz zu dem, was die akzeptierte Antwort hier behauptet.
Obwohl die akzeptierte Antwort korrekt zitiert RFC 1738 (veröffentlicht vor über 20 Jahren!), Es behauptet fälschlicherweise, dass RFC 2396 (1998 veröffentlicht) erfordert den Schrägstrich, und vernachlässigt, dass beide dieser Spezifikationen haben wiederum wurde von RFC 3986 , veröffentlicht im Jahr 2005 (noch mehrere Jahre überholt, bevor die akzeptierte Antwort geschrieben wurde ) und in jüngster Zeit durch die WHATWG URL Standard-, die beide dem Schrägstrich erlauben weggelassen werden.
Lassen Sie sich jede dieser Spezifikationen wiederum betrachtet, von den frühesten bis zuletzt:
RFC 1738: Uniform Resource Locators (URL) (veröffentlicht 1994)
erfordert Implizit den Slash einbezogen werden von angeben, dass es können weggelassen werden , wenn die URL enthält weder ein Pfad noch eine Abfrage-String (eine so genannte searchpart
, hier). Bolding unten ist mein:
Eine HTTP-URL hat die Form:
http://<host>:<port>/<path>?<searchpart>
Dabei gilt
<host>
und<port>
wie in Abschnitt 3.1 beschrieben. If:<port>
weggelassen wird, ist es, die standardmäßig auf Port 80. Kein Benutzername oder Passwort erlaubt.<path>
ist ein HTTP-Selektor und<searchpart>
ist eine Abfrage String. Die<path>
ist optional, da der<searchpart>
ist und sein vorhergehenden "?". Wenn weder<path>
noch<searchpart>
vorhanden ist, die "/" kann auch weggelassen werden.
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax (1998 veröffentlicht, "Updates" RFC 1738)
Hier ist es akzeptabel, den Schrägstrich zu verzichten. Diese RFC legalisiert einige seltsame URL-Syntax, die nicht über einen doppelten Schrägstrich nach dem Schema haben, aber wenn wir diejenigen (sie sind diejenigen, die mit einem opaque_part
in der Spezifikation der BNF ) und URLs halten, die einen Host enthalten, dann finden wir, dass ein absoluteURI
wie folgt definiert ist ...
absoluteURI = scheme ":" ( hier_part | opaque_part )
und dass ein hier_part
sieht wie folgt aus:
hier_part = ( net_path | abs_path ) [ "?" query ]
und dass ein net_path
sieht wie folgt aus:
net_path = "//" authority [ abs_path ]
, wo ein abs_path
wiederum ist definiert mit einem Schrägstrich zu beginnen. Beachten Sie, dass der abs_path
ist optional in der Grammatik oben -., Das bedeutet, dass eine URL der Form scheme://authority?query
völlig legal ist
Die Motivation für diese Änderung angedeutet ist, an in Anhang G.2. Änderungen von beiden RFC 1738 und RFC 1808 :
Das Fragezeichen „?“ Figur wurde aus der Menge entfernt erlaubten Zeichen für die Userinfo in der Autoritäts Komponente, da Test gezeigt, dass viele Anwendungen als reserviertes behandeln, um die für die Trennung Abfragekomponente aus dem Rest der URI.
Mit anderen Worten -. Code in der realen Welt wurde unter der Annahme, dass die ersten Fragezeichen in einer URL, an jedem Ort, den Beginn einer Abfragezeichenfolge markiert, und so wurde die Spezifikation pragmatisch mit der Realität auszurichten aktualisiert
RFC 3986: Uniform Resource Identifier (URI): Generic Syntax (re2005 geleast wurden; "Obsolet" RFC 2396)
Auch hier ist es zulässig, den Schrägstrich weglassen. Die Spezifikation drückt dies damit, dass ein „Weg“ ist in jeder URI erforderlich, die eine Behörde (Host) enthält, und dieser Weg muss entweder beginnt mit einem Schrägstrich oder besteht aus keine Zeichen:
Die allgemeine URI-Syntax besteht aus einer hierarchischen Abfolge von Komponenten bezeichnet als das Schema, Autorität, Pfad, Abfrage- und Fragment.
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty
Die Regelung und Pfadkomponenten erforderlich sind, obwohl der Weg sein kann, leer (keine Zeichen). Wenn Behörde vorhanden ist, muss der Pfad entweder leer sein oder mit einem Schrägstrich ( „/“) beginnen.
Für die Vollständigkeit, dass path-abempty
beachten später definiert so:
path-abempty = *( "/" segment )
Dies ist in der Tat erlaubt es keine Zeichen enthalten.
URL-Standard von WHATWG (ein Lebensstandard im Rahmen einer aktiven Wartung, zuerst im Jahr 2012 geschaffen, mit dem Ziel, obsoleting RFC 3986)
Auch die slash Weglassen ist akzeptabel, obwohl wir dieses Mal keine BNF haben zu sehen, aber stattdessen viel Prosa lesen müssen.
Abschnitt 4.3 sagt uns:
Ein muss einer der folgenden sein
- URL-Schema Zeichenfolge das ist ein ASCII Groß- und Kleinschreibung Übereinstimmung für ein Sonderregelung und nicht ein ASCII Groß- und Kleinschreibung Spiel für "
file
", gefolgt von ":
" und Schema-relativ-special-URL-Zeichenfolge- URL-Schema Zeichenfolge das ist nicht eine ASCII Groß- und Kleinschreibung Übereinstimmung für ein Sonderregelung , gefolgt von ":" und ein relativ-URL-Zeichenfolge
- URL-Schema Zeichenfolge das ist ein ASCII Groß- und Kleinschreibung Spiel für "Datei", gefolgt von ":" und einem Schema-relativ-Datei-URL-Zeichenfolge
jeder gegebenenfalls gefolgt von „?“ und ein URL-Query-String.
Da HTTP und HTTPS Sondersysteme , jede HTTP- oder HTTPS-URL muss genügen die erste dieser drei Optionen - das heißt, http:
oder https:
von einem Schema-relativ-special-URL-Zeichenfolge , die:
muss "
//
" sein, von einem rel="noreferrer">, gegebenenfalls gefolgt von ":
" und string URL-port, gegebenenfalls durch eine Weg- absolute-URL-Zeichenfolge .
Pfad-absolute-URL-Zeichenfolge definiert zu starten mit einem Schrägstrich, ist aber ausdrücklich optional oben bei der Definition einer absoluten URL-Zeichenfolge; so ist es zulässig, direkt vom Host zum „?
“ und Query-String, zu gehen und so URLs wie http://example.com?query
ist legal.
Natürlich nichts davon bietet eine gusseiserne Garantie, dass jeder Web-Server oder HTTP-Bibliothek werden solche URLs akzeptieren, noch, dass sie behandeln sie als semantisch äquivalent zu einer URL, die den Schrägstrich enthält. Aber so weit wie spec geht, die Schrägstrich-Skipping ist völlig legal.
Es ist nicht sicher, dass zu übernehmen. Web-Server und in sich geschlossene Web-Anwendungen überprüfen normalerweise die URL in der Anfrage zur Verfügung gestellt, aber es gibt keine Garantie, dass sie /abc
gleich behandeln /abc/
. Web-Server und in sich geschlossene Web-Anwendungen tun können , was sie wollen mit den Informationen aus der URL aufgelesen, und es wird nicht unbedingt das sein, was Sie erwarten. Sie werden die Konvention ist für die jeweilige URL in Frage zu finden, was.
Beachten Sie, natürlich, dass die meisten Web-Server und Web-Anwendungs-Frameworks versuchen hart alle möglichen Eingaben zu akzeptieren und mit ihnen in geeigneter Weise zu behandeln. Daher wird in den meisten Fällen der Web-Server oder ein umluftunabhängiges Web-Anwendung behandeln /abc
gleich /abc/
. Aber denken Sie daran, weil der Server kann tun, was es mit dem Weg mag, dass dies einfach eine allgemeine Beobachtung mit potenziell zahlreichen Ausnahmen.
Das Hinzufügen der akzeptierten Antwort mit etwas mehr Informationen, die ich nach dem dieses Problem gefunden:
http://tools.ietf.org/html/rfc2396
Die Behörde Komponente mit einem doppelten Schrägstrich vorangestellt ist „//“ und wird von dem nächsten Schrägstrich „/“ Fragezeichen „?“ Oder durch das Ende des URI beendet. Innerhalb der Behörde Komponente, die Zeichen ";", "?" "", "@", Und "/" sind reserviert
Auf der Grundlage dieser Aussage, die Fragezeichen das Ende der Behörde Komponente zeigen sollen, mit oder ohne Schrägstrich.
http://tools.ietf.org/html/rfc1738 (Tags ersetzt)
Der {Pfad} ist optional, ebenso wie die {} searchpart und seine vorhergehenden "?". Wenn weder {Pfad} noch {} search vorhanden ist, auch die „/“ kann weggelassen werden.
Allerdings sagt diese Aussage, dass der Schrägstrich kann nur beide weggelassen werden, wenn der Pfad und search sind nicht vorgegeben.
In der realen Welt, habe ich zuvor gelungen, einen Schrägstrich vor einem Abfragewert zu verzichten, fand aber vor kurzem eine Situation gab, die nach unten fällt. Wenn Sie eine Abfrage wie diese haben http://my.domain.com?do=something, und Sie eine hTML-Seite in Internet Explorer anzeigen, ist der Link fixed von IE. Wenn Sie klicken Sie auf Datei, Senden, Seite per E-Mail ..., wird der Link zu der E-Mail mit einem ungültigen Format hinzugefügt. Die Themen ändern sich je nach dem Inhalt der Abfragewert, aber wir konnten ungültige URLs erstellen.
Zusammenfassend es sollte Arbeit, fällt aber in Grenzfällen nach unten.