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?

War es hilfreich?

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:

  

3. Syntax-Komponenten

     

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

           

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top