Abfragezeichenfolge

A Abfragezeichenfolge ist ein Teil von a Einheitlicher Ressourcen -Locator (URL), das bestimmten Parametern Werte zuweist. Eine Abfragezeichenfolge enthält üblicherweise Felder, die einer Basis -URL durch einen Webbrowser oder eine andere Client -Anwendung hinzugefügt wurden, beispielsweise als Teil eines HTML, das Erscheinungsbild einer Seite ausgewählt oder zu Positionen in Multimedia -Inhalten springen.[1][2][3]

Ein Adressleiste an Google Chrome zeigen a URL mit der Abfragezeichenfolge title = query_string & action = bearbeiten.

Ein Webserver kann a verarbeiten Hypertext Transfer Protocol (HTTP) Anfrage entweder durch das Lesen einer Datei aus ihrer Dateisystem basierend auf URL Pfad oder durch Handhabung der Anforderung mithilfe der Logik, die spezifisch für die Art der Ressource ist. In Fällen, in denen eine spezielle Logik aufgerufen wird, steht dieser Logik zusammen mit der Pfadkomponente der URL die Abfragezeichenfolge zur Verfügung.

Struktur

Typische URL, die eine Abfragebarstellung enthält, lautet wie folgt:

https://example.com/over/there?name=ferret

Wenn ein Server eine Anforderung für eine solche Seite erhält, kann er ein Programm ausführen, das die Abfragebarstellung übergibt, was in diesem Fall in diesem Fall besteht Name = Frettchen, unverändert dem Programm. Das Fragezeichen wird als Trennzeichen verwendet und ist nicht Teil der Abfragezeichenfolge.[4][5]

Webrahmen Kann Methoden zum Parsen mehrerer Parameter in der Abfragezeichenfolge bereitstellen, die durch einen Trennzeichen getrennt sind.[6] In der folgenden Beispiel -URL werden mehrere Abfrageparameter durch die getrennt Et-Zeichen, "&":

https://example.com/path/to/page?name=ferret&color=purple

Die genaue Struktur der Abfragezeichenfolge ist nicht standardisiert. Methoden zur Analyse der Abfragezeichenfolge können zwischen den Websites unterscheiden.

Ein Link auf einer Webseite hat möglicherweise eine URL, die eine Abfragezeichenfolge enthält. Html Definiert drei Möglichkeiten, wie ein Benutzeragenten die Abfragezeichenfolge generieren kann:

  • ein HTML -Form über die ... Element
  • a Serverseitige Bildkarte über die ismap Attribut auf der Element mit an Konstruktion
  • Eine indizierte Suche über die jetzt veralteten Element

Webformen

Einer der ursprünglichen Verwendungen bestand darin, den Inhalt eines zu enthalten HTML -Formauch als Webform bekannt. Insbesondere wenn ein Formular mit den Feldern enthält Feld1, Feld2, Feld3 wird eingereicht, der Inhalt der Felder wird wie folgt als Abfragezeichenfolge codiert:

field1 = value1 & field2 = value2 & field3 = value3 ...

  • Die Abfragezeichenfolge besteht aus einer Reihe von Feldwertpaaren.
  • Innerhalb jedes Paares werden der Feldname und der Wert durch ein getrennt Gleiches Zeichen, "=".
  • Die Reihe von Paaren wird durch die getrennt Et-Zeichen, "&" (oder Semikolon, ";"Für URLs, die in HTML eingebettet und nicht von a generiert werden
    ...
    . Siehe unten).

Während es keinen endgültigen Standard gibt, die meisten Webrahmen Erlauben Sie, dass mehrere Werte einem einzelnen Feld zugeordnet werden (z. Field1 = value1 & field1 = value2 & field2 = value3).[7][8]

Für jeden aufstellen Die Abfragezeichenfolge enthält ein Paar Feld = Wert. Webformulare können Felder enthalten, die für den Benutzer nicht sichtbar sind. Diese Felder sind in der Abfragezeichenfolge enthalten, wenn das Formular eingereicht wird.

Diese Konvention ist a W3c Empfehlung.[6] W3C empfiehlt, dass alle Webserver unterstützen Semikolon Separatoren zusätzlich zu Et-Zeichen Separatoren[9] erlauben Anwendung/X-WWW-Form-Urlencoded Abfragen von Saiten in URLs innerhalb von HTML -Dokumenten ohne Entitätsverstärker.

Der Formularinhalt wird nur in der Abfragezeichenfolge der URL codiert, wenn die Formularübermittlungsmethode ist ERHALTEN. Die gleiche Codierung wird standardmäßig verwendet, wenn die Einreichungsmethode ist POST, aber das Ergebnis wird als das eingereicht HTTP -Anfrage Körper eher als in eine modifizierte URL aufgenommen zu werden.[1]

Indexierte Suche

Vor Formen wurden zu HTML hinzugefügt, Browser machten die Element als einleitende Texteingänge. Der in diese Steuerung eingegebene Text wurde als Abfragezeichenfolge zu einem an den Server gesendet ERHALTEN Anfrage für die Basis -URL oder eine andere URL, die von der angegeben wurde action Attribut.[10] Dies sollte den Webservern ermöglichen, den bereitgestellten Text als Abfragekriterien zu verwenden, damit sie eine Liste der passenden Seiten zurückgeben können.[11]

Wenn die Texteingabe in die indizierte Suchregelung eingereicht wird, wird er wie folgt als Abfragezeichenfolge codiert:

Argument1+Argument2+Argument3 ...

  • Die Abfragezeichenfolge besteht aus einer Reihe von Argumenten, indem der Text in den Räumen in Wörter analysiert wird.
  • Die Serie wird durch die getrennt Pluszeichen, '+'.

Obwohl die Das Element ist veraltet und die meisten Browser unterstützen oder rendern es nicht mehr. Es gibt immer noch einige Überreste der indizierten Suche. Zum Beispiel ist dies die Quelle des besonderen Umgangs von Pluszeichen, '+'Innerhalb der Browser -URL -Prozent -Codierung (die heute mit der Abwertung der indexierten Suche so gut wie überflüssig ist %20). Auch einige Webserver unterstützen CGI (z.B., Apache) verarbeitet die Abfragezeichenfolge in Befehlszeilenargumente, wenn sie keine enthält Gleiches Zeichen, '='(gemäß Abschnitt 4.4 von CGI 1.1). Einige CGI -Skripte hängen immer noch von diesem historischen Verhalten für URLs ab, die in HTML eingebettet sind.

URL -Codierung

Etwas Figuren Kann nicht Teil einer URL sein (zum Beispiel der Raum) und einige andere Zeichen haben eine besondere Bedeutung in einer URL: Zum Beispiel des Charakters # kann verwendet werden, um einen Unterabschnitt weiter anzugeben (oder Fragment) eines Dokuments. In HTML -Formen der Charakter = wird verwendet, um einen Namen von einem Wert zu trennen. Die URI -generische Syntax verwendet URL -Codierung Um dieses Problem zu bewältigen, stellen HTML -Formulare zwar einige zusätzliche Substitutionen an, anstatt die prozentuale Codierung für alle solchen Zeichen anzuwenden. Raum ist codiert als '+' oder "%20".[12]

HTML 5 Gibt die folgende Transformation für die Übermittlung von HTML -Formularen mit der "GET" -Methode an einen Webserver an.[1] Das Folgende ist eine kurze Zusammenfassung des Algorithmus:

  • Zeichen, die nicht in das richtige Zeichen konvertiert werden können, werden durch HTML ersetzt Numerische Charakterreferenzen[13]
  • Raum ist codiert als '+' oder '%20'
  • Briefe (AZ und az), Zahlen (09) und die Charaktere '~','-','.' und '_'sind wie Is übrig bleiben
  • + wird von %2b codiert
  • Alle anderen Zeichen werden als codiert %HH hexadezimal Darstellung mit allen nicht-ascii-Zeichen, die zuerst als UTF-8 (oder andere angegebene Codierung) codiert werden,

Das Oktett entspricht der Tilde ("~") ist in Abfragen von RFC3986 in Abfragen gestattet, musste jedoch prozentualcodiert in HTML-Formularen sind"%7e".

Die Kodierung des Raums als '+'Und die Auswahl von "As-is" -Perkmalen unterscheidet diese Codierung von RFC 3986.

Beispiel

Wenn ein bilden ist in einen eingebettet Html Seite wie folgt:

<bilden Aktion="/cgi ---Bin/test.cgi" Methode="erhalten">  <Eingang Typ="Text" Name="Erste" />  <Eingang Typ="Text" Name="zweite" />  <Eingang Typ="einreichen" /> bilden> 

Und der Benutzer fügt die Zeichenfolgen "Dies ist ein Feld" ein und "War es schon (bereits)?" in den beiden Textfelder und drückt die Sendetaste, das Programm, das Programm test.cgi (das von der angegebene Programm Aktion Attribut des bilden Element im obigen Beispiel) empfangen die folgende Abfragezeichenfolge:zuerst = this+ist+a+field & zweiten = war+es+klar+%28already%29%3f.

Wenn das Formular auf dem verarbeitet wird Server durch eine CGI SkriptDas Skript kann die Abfragezeichenfolge normalerweise als empfangen Umgebungsvariable genannt Query_string.

Verfolgung

Ein Programm, das eine Abfragezeichenfolge empfängt, kann einen Teil oder alles ignorieren. Wenn die angeforderte URL einer Datei und nicht einem Programm entspricht, wird die gesamte Abfragezeichenfolge ignoriert. Unabhängig davon, ob die Abfragebarstellung verwendet wird oder nicht, wird die gesamte URL einschließlich des Servers gespeichert Protokolldateien.

Diese Tatsachen ermöglichen es Abfragesteichen, Benutzer auf ähnliche Weise wie die von bereitgestellten zu verfolgen HTTP -Kekse. Damit dies funktioniert, muss jedes Mal, wenn der Benutzer eine Seite herunterlädt, eine eindeutige Kennung ausgewählt und als Abfragezeichenfolge zu den URLs aller Links auf der Seite hinzugefügt werden. Sobald der Benutzer einer dieser Links folgt, wird die entsprechende URL an den Server angefordert. Auf diese Weise ist der Download dieser Seite mit dem vorherigen verknüpft.

Wenn beispielsweise eine Webseite mit Folgendes angefordert wird:

 <a href="foo.html">Siehe meine Seite!a>  <a href="bar.html">meins ist bessera> 

eine einzigartige Schnur, wie z. E0A72CB2A2C7 wird ausgewählt und die Seite wird wie folgt geändert:

 <a href="Foo.html? E0A72CB2A2C7">Siehe meine Seite!a>  <a href="Bar.html? E0A72CB2A2C7">meins ist bessera> 

Die Hinzufügung der Abfragezeichenfolge ändert nicht die Art und Weise, wie die Seite dem Benutzer angezeigt wird. Wenn der Benutzer beispielsweise den ersten Link folgt, fordert der Browser die Seite an foo.html? e0a72cb2a2c7 auf den Server, der ignoriert, was folgt ? und sendet die Seite foo.html Wie erwartet auch die Abfragezeichenfolge zu ihren Links hinzufügen.

Auf diese Weise wird jede nachfolgende Seitenanforderung dieses Benutzers dieselbe Abfragebarstellung übertragen E0A72CB2A2C7Es ermöglicht, festzustellen, dass alle diese Seiten vom selben Benutzer betrachtet wurden. Abfragebräge werden häufig in Verbindung mit verwendet Web Beacons.

Die Hauptunterschiede zwischen Abfragesteichen für die Verfolgung und HTTP -Cookies sind:

  1. Abfragen sind Teil der URL und sind daher enthalten, wenn der Benutzer die URL an einen anderen Benutzer speichert oder sendet. Kekse können in Browsing -Sitzungen aufrechterhalten werden, werden jedoch nicht mit der URL gespeichert oder gesendet.
  2. Wenn der Benutzer zwei (oder mehr) unabhängige Pfade auf demselben Webserver ankommt, wird er zwei verschiedene Abfragebräge zugewiesen, während die gespeicherten Cookies gleich sind.
  3. Der Benutzer kann Cookies deaktivieren. In diesem Fall funktioniert mit Cookies zur Verfolgung nicht. Die Verwendung von Abfragesteichen für die Verfolgung sollte jedoch in allen Situationen funktionieren.
  4. Unterschiedliche Abfragesträge, die von unterschiedlichen Besuchen auf der Seite weitergegeben werden, bedeuten, dass die Seiten niemals vom Browser (oder Proxy, falls vorhanden) Cache bedient werden, wodurch die Last auf dem Webserver erhöht und die Benutzererfahrung verlangsamt wird.

Kompatibilitätsprobleme

Laut dem Http Spezifikation:

In der Praxis finden sich verschiedene Ad-hoc-Einschränkungen bei der Länge der Anfrage. Es wird empfohlen, dass alle HTTP-Absender und Empfänger mindestens 8000 Oktetten untersuchen.[14]

Wenn die URL zu lang ist, schlägt der Webserver mit dem fehl 414 Anfrage-uri zu lang HTTP -Statuscode.

Die gemeinsame Problemumgehung für diese Probleme ist die Verwendung POST Anstatt von ERHALTEN und speichern Sie die Parameter in der Anfrage. Die Längengrenzen auf Anfragekörpern sind in der Regel viel höher als die an URL -Länge. Beispielsweise beträgt die Grenze für die Postgröße standardmäßig 2 MB auf IIS 4.0 und 128 KB auf IIS 5.0. Das Limit ist auf Apache2 mit dem konfigurierbar LimitRequestBody Richtlinie, die die Anzahl der Bytes von 0 (dh unbegrenzt) bis 2147483647 (2 GB) angibt, die in einer Antragsbehörde zulässig sind.[15]

Siehe auch

Verweise

  1. ^ a b c [1], HTML5.2, W3C -Empfehlung, 14. Dezember 2017
  2. ^ 4 verschiedene Möglichkeiten, Zeitstempel auf YouTube hinzuzufügen
  3. ^ Parameter zu index.php - Mediawiki
  4. ^ T. Berners-Lee; R. Fielding; L. Massinter (Januar 2005). "RFC 3986". "Syntaxkomponenten" (Abschnitt 3).
  5. ^ T. Berners-Lee; R. Fielding; L. Massinter (Januar 2005). "RFC 3986". "Abfrage" (Abschnitt 3.4).
  6. ^ a b Formulare in HTML -Dokumenten. W3.org. Abgerufen am 2013-09-08.
  7. ^ "ServletRequest (Java ee 6)". docs.oracle.com. 2011-02-10. Abgerufen 2013-09-08.
  8. ^ "URI - Autoritative Position des doppelten HTTP -Abfragetasten". Paketüberfluss. 2013-06-09. Abgerufen 2013-09-08.
  9. ^ Leistung, Implementierung und Designnotizen. W3.org. Abgerufen am 2013-09-08.
  10. ^ "<Sindex>". HTML (Hypertext Markup -Sprache).
  11. ^ "HTML/Elements/Issidex". W3C Wiki.
  12. ^ "HTML -URL -Codierungsreferenz". W3schools. Abgerufen 1. Mai, 2013.
  13. ^ Das Anwendung/X-WWW-Form-Urlencoded Codierungsalgorithmus, HTML5.2, W3C -Empfehlung, 14. Dezember 2017
  14. ^ HTTP/1.1 Nachrichtensyntax und Routing. ietf.org. Abgerufen am 2014-07-31.
  15. ^ Core - Apache HTTP -Server. Httpd.apache.org. Abgerufen am 2013-09-08.