Wir entwerfen ein URL-System, das Anwendungsabschnitte als durch Schrägstriche getrennte Wörter angibt. Dies ist insbesondere in GWT der Fall, sodass sich die relevanten Teile der URL im Hash befinden (der von einer Controller-Schicht auf der Clientseite interpretiert wird):
http://site/gwturl#section1/section2
Einige Abschnitte benötigen möglicherweise zusätzliche Attribute, die wir mit a angeben möchten :
, damit die Abschnittsteile der URL eindeutig sind. Der Code würde zuerst auf /
und dann :
wie folgt aufgeteilt:
http://site/gwturl#user:45/comments
Natürlich tun wir dies aus Gründen der URL-Freundlichkeit. Daher möchten wir sicherstellen, dass keines dieser Zeichen, die eine besondere Bedeutung haben, von Browsern oder einem anderen System URL-codiert wird und am Ende eine URL wie diese enthält Dies:
http://site/gwturl#user%3A45/comments <--- BAD
Ist die Verwendung des Doppelpunkts auf diese Weise sicher (was bedeutet, dass er nicht automatisch codiert wird) für Browser, Lesezeichen-Systeme, sogar Javascript oder Java-Code?
quelle
#!
um anzuzeigen, dass die Seiten statusbehaftet sind - siehe googlewebmastercentral.blogspot.com/2009/10/… (Dieser Vorschlag wurde eingehalten von starken AJAX-Nutzern wie Facebook)Antworten:
Ich habe vor kurzem schrieb einen URL - Encoder, so dass diese ziemlich frisch in meinem Kopf ist.
Alle Zeichen im Fragmentteil (
user:45/comments
) sind für RFC 3986- URIs vollkommen zulässig .Die relevanten Teile des ABNF :
Abgesehen von diesen Einschränkungen hat der Fragmentteil keine definierte Struktur, die über die von Ihrer Anwendung angegebene hinausgeht. Das Schema http besagt nur, dass Sie diesen Teil nicht an den Server senden.
BEARBEITEN:
D'oh!
Trotz meiner Behauptungen bezüglich der URI-Spezifikation liefert irreputable die richtige Antwort, wenn er darauf hinweist, dass die HTML 4-Spezifikation Elementnamen / Bezeichner einschränkt .
Beachten Sie, dass sich die Bezeichnerregeln in HTML 5 ändern . URI-Einschränkungen gelten weiterhin (zum Zeitpunkt des Schreibens gibt es einige ungelöste Probleme bei der Verwendung von URIs durch HTML 5).
quelle
:
ist ein Gen-Delim, kein Sub-Delim.:
ist inpchar
, was in istfragment
, also:
ist erlaubt. @Renesis - Wikipedia hat einen Artikel über ABNF en.wikipedia.org/wiki/ABNF Sie sehen sich im Grunde eine Liste zulässiger Zeichen an, wobei OR/
bedeutet . Ich habe keine GWT-Programmierung durchgeführt, daher weiß ich nicht, wie der Fragmentteil von URIs verwendet wird.:
im Fragment ignorieren sollten / werden (die Codierung überspringen) ?Denken Sie neben der McDowell-Analyse zum URI-Standard auch daran, dass das Fragment ein gültiger HTML-Ankername sein muss. Laut http://www.w3.org/TR/html4/types.html#type-name
Sie haben also Glück. ":" ist ausdrücklich erlaubt. Und niemand sollte "%" - entkommen, nicht nur, weil "%" dort ein illegales Zeichen ist, sondern auch, weil das Fragment char-by-char mit dem Ankernamen übereinstimmen muss. Daher sollte kein Agent versuchen, sie in irgendeiner Weise zu manipulieren.
Sie müssen es jedoch testen. Webstandards werden nicht strikt befolgt, manchmal sind die Standards widersprüchlich. Beispielsweise lässt HTTP / 1.1 RFC 2616 keine Abfragezeichenfolge in der Anforderungs-URL zu, während HTML beim Senden eines Formulars mit der GET-Methode eine erstellt. Was auch immer in der realen Welt implementiert ist, gewinnt am Ende des Tages.
quelle
MediaWiki und andere Wiki-Engines verwenden Doppelpunkte in ihren URLs, um Namespaces zu kennzeichnen, ohne dass größere Probleme auftreten.
zB http://en.wikipedia.org/wiki/Template:Welcome
quelle
Ich würde nicht darauf zählen. Die URL wird wahrscheinlich wie
%3A
von vielen Benutzeragenten codiert .quelle
Aus
URLEncoder
Javadoc:Das heißt,
:
ist nicht sicher.quelle
Ich sehe nicht, dass Firefox oder IE8 einige der Wikipedia- URLs codieren , die das Zeichen enthalten.
quelle
Doppelpunkte werden als Aufteilung zwischen Benutzername und Kennwort verwendet, wenn für ein Protokoll eine Authentifizierung erforderlich ist.
quelle
Doppelpunkt ist nicht sicher. Siehe hier
quelle
Es ist kein sicheres Zeichen und wird verwendet, um zu unterscheiden, mit welchem Port Sie eine Verbindung herstellen, wenn er sich direkt nach Ihrem Domainnamen befindet
quelle