Estamos projetando um sistema de URL que especificará as seções do aplicativo como palavras separadas por barras. Especificamente, isso está no GWT, portanto, as partes relevantes do URL estarão no hash (que será interpretado por uma camada de controlador no lado do cliente):
http://site/gwturl#section1/section2
Algumas seções podem precisar de atributos adicionais, que gostaríamos de especificar com um :
, para que as partes da seção do URL não sejam ambíguas. O código seria dividido primeiro /
, depois :
, assim:
http://site/gwturl#user:45/comments
Claro, estamos fazendo isso para facilitar o uso de url, portanto, gostaríamos de ter certeza de que nenhum desses caracteres que terão um significado especial será codificado por url por navegadores ou qualquer outro sistema e termine com um url como isto:
http://site/gwturl#user%3A45/comments <--- BAD
O uso de dois pontos dessa maneira é seguro (ou seja, não será codificado automaticamente) para navegadores, sistemas de favoritos e até mesmo Javascript ou código Java?
fonte
#!
para indicar que as páginas têm estado - consulte googlewebmastercentral.blogspot.com/2009/10/… (Esta proposta foi cumprida por usuários AJAX intensos, como o Facebook)Respostas:
Recentemente, escrevi um codificador de URL, então isso está bem fresco em minha mente.
Todos os caracteres na parte do fragmento (
user:45/comments
) são perfeitamente válidos para URIs RFC 3986 .As partes relevantes do ABNF :
Além dessas restrições, a parte do fragmento não tem estrutura definida além daquela que seu aplicativo fornece. O esquema, http, diz apenas que você não envia esta parte para o servidor.
EDITAR:
D'oh!
Apesar de minhas afirmações sobre a especificação URI, irreputable fornece a resposta correta quando ele aponta que a especificação HTML 4 restringe nomes / identificadores de elemento .
Observe que as regras do identificador estão mudando no HTML 5 . As restrições de URI ainda serão aplicáveis (no momento da escrita, havia alguns problemas não resolvidos em torno do uso de URIs do HTML 5).
fonte
:
é um gen-delim, não um sub-delim.:
está dentropchar
, que está dentrofragment
, então:
é permitido. @Renesis - A Wikipedia tem um artigo sobre ABNF en.wikipedia.org/wiki/ABNF Você está basicamente olhando para uma lista de caracteres permitidos, onde/
significa OU . Não fiz nenhuma programação GWT, então não sei como ele usa a parte do fragmento de URIs.:
no fragmento?Além da análise de McDowell sobre o padrão URI, lembre-se também de que o fragmento deve ser um nome de âncora HTML válido. De acordo com http://www.w3.org/TR/html4/types.html#type-name
Então você está com sorte. ":" é explicitamente permitido. E ninguém deve "%" - escapar disso, não apenas porque "%" é um char ilegal lá, mas também porque o fragmento deve corresponder ao nome da âncora char-por-char, portanto, nenhum agente deve tentar adulterá-los de qualquer forma.
No entanto, você tem que testá-lo. Os padrões da Web não são seguidos estritamente; às vezes, os padrões são conflitantes. Por exemplo, HTTP / 1.1 RFC 2616 não permite string de consulta na URL de solicitação, enquanto HTML constrói uma ao enviar um formulário com o método GET. O que for implementado no mundo real ganha no final do dia.
fonte
MediaWiki e outros motores wiki usam dois pontos em seus URLs para designar namespaces, aparentemente sem maiores problemas.
por exemplo, http://en.wikipedia.org/wiki/Template:Welcome
fonte
Eu não contaria com isso. Provavelmente, o URL será codificado
%3A
por muitos user agents.fonte
De
URLEncoder
javadoc:Ou seja,
:
não é seguro.fonte
Não vejo o Firefox ou o IE8 codificando alguns dos URLs da Wikipedia que incluem o caractere.
fonte
Os dois pontos são usados como divisão entre o nome de usuário e a senha se um protocolo exigir autenticação.
fonte
O cólon não é seguro. Veja aqui
fonte
Não é um caractere seguro e é usado para distinguir a porta à qual você se conecta quando está logo após seu nome de domínio
fonte