Prozentualer Kodierung

Prozentualer Kodierung, auch bekannt als URL -Codierung, ist eine Methode zu kodieren willkürliche Daten in a Einheitliche Ressourcenkennung (URI) nur die begrenzte Verwendung US-Ascii Charaktere legal innerhalb eines URI. Obwohl es als bekannt ist als URL -CodierungEs wird auch allgemeiner innerhalb des Haupts verwendet Einheitliche Ressourcenkennung (URI) -Set, das beides gehört Einheitlicher Ressourcen -Locator (URL) und Einheitlicher Ressourcenname (URNE). Daher wird es auch zur Herstellung von Daten der verwendet Anwendung/X-WWW-Form-Urlencoded Medientyp, wie oft bei der Einreichung von verwendet wird Html bilden Daten in Http Anfragen.

Prozentualer Kodierung in einem URI

Arten von URI -Zeichen

Die in einem URI erlaubten Charaktere sind entweder reserviert oder vorbehaltlos (oder ein prozentualer Charakter als Teil einer prozentualen Kodierung). Reserviert Charaktere sind die Charaktere, die manchmal eine besondere Bedeutung haben. Zum Beispiel, Schrägstrich Zeichen werden verwendet, um verschiedene Teile einer URL (oder allgemeiner eine URI) zu trennen. Vorbehaltlos Charaktere haben keine solchen Bedeutungen. Mithilfe von prozentualen Kodierung werden reservierte Zeichen unter Verwendung von speziellen Zeichensequenzen dargestellt. Die Sätze reservierter und nicht reservierter Charaktere und die Umstände, unter denen bestimmte zurückhaltende Zeichen besondere Bedeutung haben, haben sich bei jeder Überarbeitung der Spezifikationen, die URI- und URI -Programme regeln, geringfügig geändert.

RFC 3986 Abschnitt 2.2 Reservierte Zeichen (Januar 2005)
! # $ & ' ( ) * + , / : ; = ? @ [ ]
RFC 3986 Abschnitt 2.3 Ungebildete Charaktere (Januar 2005)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

Andere Charaktere in einem URI müssen prozentualcodiert sein.

Reservierte Zeichen

Wenn ein Charakter aus dem reservierten Satz (ein "reserviertes Zeichen") in einem bestimmten Kontext eine besondere Bedeutung (einen "reservierten Zweck") hat, und ein URI -Schema besagt, dass es notwendig ist, diesen Charakter für einige zu verwenden Sonstiges Zweck, dann muss der Charakter sein prozentualcodiert. Das prozentuale Kodieren eines reservierten Zeichens beinhaltet die Umwandlung des Zeichens in seinen entsprechenden Byte-Wert in ASCII und dann diesen Wert als Paar von darstellen hexadezimal Ziffern (wenn es eine einzelne Hex -Ziffer gibt, a führende Null sind hinzugefügt). Die Ziffern, denen a vorausging Prozentzeichen (%) als an Escape-Zeichenwerden dann im URI anstelle des reservierten Charakters verwendet. (Für ein Nicht-ASCII-Zeichen wird es typischerweise in seine Byte-Sequenz in umgewandelt UTF-8und dann wird jeder Bytewert wie oben dargestellt.)

Der reservierte Charakter /Zum Beispiel, wenn sie in der "Pfad" -Komponente von a verwendet werden Uri, hat die besondere Bedeutung, a zu sein Abgrenzer zwischen Pfadsegmente. Wenn nach einem bestimmten URI -Schema, / muss sein in ein Pfadsegment, dann die drei Zeichen %2f oder %2f muss im Segment anstelle eines Rohes verwendet werden /.

Reservierte Zeichen nach prozentualer Kodierung
! # $ % & ' ( ) * + , / : ; = ? @ [ ]
%20 %21 %23 %24 %25 %26 %27 %28 %29 %2a %2b %2c %2f %3a %3b %3d %3f %40 %5b %5d

Reservierte Zeichen, die in einem bestimmten Kontext keinen reservierten Zweck haben, können ebenfalls prozentualcodiert sein, unterscheiden sich jedoch nicht semantisch von denen, die dies nicht sind.

In dem "Anfrage"Komponente eines URI (der Teil nach a ? Charakter) zum Beispiel, / wird immer noch als reserviertes Charakter angesehen, aber es hat normalerweise keinen reservierten Zweck, es sei denn, ein bestimmtes URI -Schema sagt etwas anderes. Der Charakter muss nicht prozentualcodiert sein, wenn er keinen reservierten Zweck hat.

URIs, die sich nur dadurch unterscheiden, ob ein reservierter Charakter prozentualcodiert ist oder buchstäblich erscheint, gelten normalerweise nicht gleichwertig (bezeichnen dieselbe Ressource), es sei denn, es kann festgestellt werden, dass die betreffenden reservierten Zeichen keinen reservierten Zweck haben. Diese Bestimmung hängt von den Regeln ab, die für reservierte Zeichen durch einzelne URI -Systeme festgelegt wurden.

Ungebildete Charaktere

Charaktere aus dem nicht reservierten Set müssen nie prozentualcodiert sein.

URIs, die sich nur dadurch unterscheiden, ob ein nicht reservierter Charakter prozentualcodiert ist oder buchstäblich per Definition äquivalent ist, aber URI-Prozessoren erkennen in der Praxis möglicherweise nicht immer diese Äquivalenz. Zum Beispiel URI -Verbraucher sollte nicht behandeln %41 anders als A oder %7e anders als ~, aber manche tun es. Für die maximale Interoperabilität sind URI-Produzenten von prozentuellen nicht reservierten Charakteren entmutigt.

Prozentualer Charakter

Weil der prozentuale Charakter ( % ) dient als Indikator für prozentuierte Oktetten, es muss prozentualcodiert sein als %25 Damit dieses Oktett als Daten innerhalb eines URI verwendet werden kann.

Willkürliche Daten

Die meisten URI -Systeme beinhalten die Darstellung willkürlicher Daten, wie z. IP Adresse oder Dateisystem Pfad, als Komponenten eines URI. Das URI -Schema -Spezifikationen sollten, aber oft nicht, eine explizite Zuordnung zwischen URI -Zeichen und allen möglichen Datenwerten, die von diesen Zeichen dargestellt werden.

Binärdaten

Seit der Veröffentlichung von RFC 1738 im Jahr 1994 wurde festgelegt, dass Schemata, die für die Darstellung von vorliegen Binärdaten In einem URI muss die Daten auf die gleiche Weise wie oben in 8-Bit-Bytes und prozentualen Byte unterteilt.[1] Bytewert 0x0f beispielsweise sollte durch dargestellt werden %0f, aber Byte -Wert 0x41 kann durch dargestellt werden A, oder %41. Die Verwendung von nichtcodierten Zeichen für alphanumerische und andere nicht reservierte Zeichen wird normalerweise bevorzugt, da dies zu kürzeren URLs führt.

Zeichendaten

Das Verfahren für prozentuelle Binärdaten wurde häufig, manchmal unangemessen oder ohne vollständig spezifiziert, extrapoliert, um auf charakterbasierte Daten anzuwenden. In dem Weltweites NetzDie prägenden Jahre, wenn sie sich mit Datenzeichen im ASCII-Repertoire befassen und ihre entsprechenden Bytes in ASCII als Grundlage für die Bestimmung der prozentuierten Sequenzen verwenden, war diese Praxis relativ harmlos. Es wurde nur angenommen, dass Charaktere und Bytes eins zu eins kartierten und austauschbar waren. Die Notwendigkeit, Zeichen außerhalb des ASCII -Bereichs darzustellen, wuchs jedoch schnell, und URI -Schemata und Protokolle lieferten häufig keine Standardregeln für die Vorbereitung von Zeichendaten für die Aufnahme in einen URI. Webanwendungen begannen folglich mit unterschiedlichem Multi-Byte, Staatsbürgerlichund andere nicht-ascii-kompatible Kodierungen als Grundlage für prozentuale Kodierung, was zu Unklarheiten und Schwierigkeiten bei der zuverlässigen Interpretation von URIs führt.

Zum Beispiel gehen viele URI -Schemata und -protokolle, die auf RFCs 1738 und 2396 basieren Zeichenkodierung Bevor sie in einem URI durch nicht reservierte Zeichen oder prozentualcodierte Bytes dargestellt werden. Wenn das Schema dem URI nicht erlaubt, einen Hinweis darauf zu geben, welche Codierung verwendet wurde, oder wenn die Codierung mit der Verwendung von ASCII bis prozentig reserviert und nicht reservierte Zeichen konflikt, kann der URI nicht zuverlässig interpretiert werden. Einige Schemata berücksichtigen keine Codierung und schlagen stattdessen nur vor, dass Datenzeichen direkt auf URI-Zeichen zugeordnet werden, was es den Implementierungen überlässt, um zu entscheiden, ob und wie prozentuale Datenzeichen, die weder in den reservierten noch nicht reservierten Mengen enthalten sind.

Gemeinsame Zeichen nach prozentualer Kodierung (ASCII oder UTF-8)
Neue Zeile Platz " % - . < > \ ^ _ ` { | } ~ £
%0a oder %0d oder %0d%0a %20 %22 %25 %2d %2e %3c %3e %5c %5e %5f %60 %7b %7c %7d %7e %C2%A3 %E5%86%86

Beliebige Charakterdaten werden manchmal prozentualcodiert und in Nicht-URI-Situationen verwendet, z.

Aktueller Standard

Die generische URI -Syntax empfiehlt, dass neue URI -Schemata, die die Darstellung von Charakterdaten in einem URI liefern UTF-8und dann prozentualcodieren Sie diese Werte. Dieser Vorschlag wurde im Januar 2005 mit der Veröffentlichung von RFC 3986 eingeführt. URI -Systeme, die vor diesem Datum eingeführt wurden, sind nicht betroffen.

Nicht von der aktuellen Spezifikation berücksichtigt, was mit codierten Zeichendaten zu tun ist. In Computern manifestieren sich beispielsweise die Charakterdaten in codierter Form in einer bestimmten Ebene und könnten daher entweder binäre oder Zeichendaten behandelt werden, wenn sie auf URI -Zeichen abgebildet werden. Vermutlich liegt es an den URI -Schema -Spezifikationen, diese Möglichkeit zu berücksichtigen und das eine oder andere zu erfordern, aber in der Praxis, wenn überhaupt, tun dies tatsächlich nur wenige, wenn überhaupt.

Nicht standardmäßige Implementierungen

Es gibt eine nicht standardmäßige Kodierung für Unicode-Zeichen: %UXXXX, wo xxxx ist ein UTF-16 Codeeinheit wird als vier hexadezimale Ziffern dargestellt. Dieses Verhalten wird von keinem RFC festgelegt und wurde gewesen abgelehnt von der W3C. Die achte Ausgabe von ECMA-262 enthält immer noch ein Flucht Funktion, die diese Syntax zusammen mit verwendet Encodeuri und Enkoduskomponent Funktionen, die gelten UTF-8 Codierung zu einer Schnur, dann prozentuale Auseinandersetzung mit den resultierenden Bytes.[2]

Der Anwendung/x-www-form-rencodierte Typ

Wenn Daten, die in HTML eingegeben wurden Formen wird übermittelt, die Feldnamen und -werte der Formular werden in einer HTTP -Anforderungsnachricht mithilfe der Methode codiert und an den Server gesendet ERHALTEN oder POSToder historisch gesehen über Email.[3] Die standardmäßig verwendete Codierung basiert auf einer frühen Version der allgemeinen URI-prozentuierten Regeln,[4] mit einer Reihe von Modifikationen wie z. Neue Zeile Normalisierung und Ersetzen von Räumen durch + Anstatt von %20. Das Medientyp von Daten, die so codiert sind, ist Anwendung/X-WWW-Form-Urlencodedund es ist derzeit in der HTML und in der HTML definiert XForms Spezifikationen. zusätzlich CGI Die Spezifikation enthält Regeln, wie Webserver Daten dieses Typs dekodieren und sie für Anwendungen zur Verfügung stellen.

Wenn HTML -Formulardaten in einer HTTP -GET -Anforderung gesendet werden, ist sie in der enthalten Abfragekomponente der Anforderung URI unter Verwendung der oben beschriebenen Syntax. Wenn ein HTTP eingesendet wird POST Anfrage oder per E -Mail werden die Daten in den Körper der Nachricht platziert und Anwendung/X-WWW-Form-Urlencoded ist im Inhaltsheader der Nachricht enthalten.

Siehe auch

Verweise

  1. ^ RFC 1738 §2.2; RFC 2396 §2.4; RFC 3986 §1.2.1, 2.1, 2.5.
  2. ^ "ECMascript 2017 Sprachspezifikation (ECMA-262, 8. Ausgabe, Juni 2017)". ECMA International.
  3. ^ Benutzer-Agent-Support für E-Mail-basiert Html Formulareingabe unter Verwendung eines "Mailto" URL Als Formaktion wurde in RFC 1867 Abschnitt 5.6 während der HTML 3.2 -Ära vorgeschlagen. Verschiedene Webbrowser implementierten es, indem sie ein separates E -Mail -Programm aufrufen oder ihre eigenen rudimentären SMTP Fähigkeiten. Obwohl es manchmal unzuverlässig ist, war es kurz beliebt, um Formaten zu übertragen, ohne einen Webserver einzubeziehen oder CGI Skripte.
  4. ^ Berners-Lee, T. (Juni 1994). "RFC 1630". IETF -Tools. Ietf. Abgerufen 29. Juni 2016.

Externe Links

In den folgenden Spezifikationen werden reservierte Charaktere, nicht reservierte Zeichen und prozentuale Kenner in irgendeiner Form besprochen und definieren: