Projektujemy system adresów URL, który będzie określał sekcje aplikacji jako słowa oddzielone ukośnikami. W szczególności jest to w GWT, więc odpowiednie części adresu URL będą w skrócie (który zostanie zinterpretowany przez warstwę kontrolera po stronie klienta):
http://site/gwturl#section1/section2
Niektóre sekcje mogą wymagać dodatkowych atrybutów, które chcielibyśmy określić za pomocą a :
, aby części sekcji adresu URL były jednoznaczne. Kod podzieliłby się najpierw /
, potem dalej :
, w ten sposób:
http://site/gwturl#user:45/comments
Oczywiście robimy to ze względu na przyjazność dla adresów URL, dlatego chcielibyśmy mieć pewność, że żaden z tych znaków, które będą miały specjalne znaczenie, nie zostanie zakodowany w postaci adresu URL przez przeglądarki ani żaden inny system i nie będzie miał adresu URL takiego jak to:
http://site/gwturl#user%3A45/comments <--- BAD
Czy używanie dwukropka w ten sposób jest bezpieczne (co oznacza, że nie zostanie automatycznie zakodowane) dla przeglądarek, systemów zakładek, a nawet kodu Javascript lub Java?
źródło
#!
aby wskazać, że strony są stanowe - patrz googlewebmastercentral.blogspot.com/2009/10/ (ta propozycja została zastosowana do przez ciężkich użytkowników AJAX, takich jak Facebook)Odpowiedzi:
Niedawno napisałem koder URL, więc mam to całkiem świeże w głowie.
Wszystkie znaki we fragmencie part (
user:45/comments
) są całkowicie legalne dla identyfikatorów URI RFC 3986 .Odpowiednie części ABNF :
Oprócz tych ograniczeń część fragmentowa nie ma zdefiniowanej struktury poza tą, którą daje jej aplikacja. Schemat http mówi tylko, że nie wysyłasz tej części na serwer.
EDYTOWAĆ:
D'oh!
Pomimo moich twierdzeń na temat specyfikacji URI, irreputable dostarcza poprawnej odpowiedzi, gdy zwraca uwagę, że specyfikacja HTML 4 ogranicza nazwy / identyfikatory elementów .
Zwróć uwagę, że zasady dotyczące identyfikatorów zmieniają się w HTML 5 . Ograniczenia dotyczące identyfikatorów URI będą nadal obowiązywać (w chwili pisania tego artykułu istnieją nierozwiązane problemy dotyczące korzystania z URI w HTML 5).
źródło
:
jest to rozgraniczenie genów, a nie podziały podrzędne.:
jest wpchar
, który jest wfragment
, więc:
jest dozwolony. @Renesis - Wikipedia ma artykuł o ABNF en.wikipedia.org/wiki/ABNF Zasadniczo patrzysz na listę dozwolonych znaków, gdzie/
oznacza OR . Nie robiłem żadnego programowania GWT, więc nie wiem, jak wykorzystuje fragmentową część identyfikatorów URI.:
fragmentu?Oprócz analizy McDowella dotyczącej standardu URI pamiętaj również, że fragment musi być prawidłową nazwą kotwicy HTML. Według http://www.w3.org/TR/html4/types.html#type-name
Więc masz szczęście. „:” jest wyraźnie dozwolone. I nikt nie powinien "%" - uciec od tego, nie tylko dlatego, że "%" jest tam niedozwolonym znakiem, ale także dlatego, że fragment musi pasować do nazwy kotwicy znak po znaku, dlatego żaden agent nie powinien próbować ich w żaden sposób manipulować.
Jednak musisz to przetestować. Standardy sieciowe nie są ściśle przestrzegane, czasami standardy są sprzeczne. Na przykład protokół HTTP / 1.1 RFC 2616 nie zezwala na ciąg zapytania w adresie URL żądania, podczas gdy HTML konstruuje go podczas przesyłania formularza metodą GET. Cokolwiek zaimplementowano w prawdziwym świecie, wygrywa pod koniec dnia.
źródło
MediaWiki i inne silniki wiki używają dwukropków w swoich adresach URL do oznaczania przestrzeni nazw, bez większych problemów.
np. http://en.wikipedia.org/wiki/Template:Welcome
źródło
Nie liczyłbym na to. Prawdopodobnie zostanie zakodowany adres URL, tak jak
%3A
przez wielu klientów użytkownika.źródło
Z
URLEncoder
javadoc:Oznacza to, że
:
nie jest bezpieczny.źródło
Nie widzę kodującego Firefox lub IE8 niektórych adresów URL Wikipedii, które zawierają ten znak.
źródło
Dwukropki służą do podziału między nazwą użytkownika i hasłem, jeśli protokół wymaga uwierzytelnienia.
źródło
Okrężnica nie jest bezpieczna. Spójrz tutaj
źródło
Nie jest to bezpieczny znak i służy do rozróżnienia portu, z którym się łączysz, gdy znajduje się on bezpośrednio po nazwie domeny
źródło