Por que não há erro ao inserir muitas barras em um URL de arquivo em um navegador?

1

Na minha máquina do Windows 10, posso inserir um URL de arquivo de um diretório local (por exemplo, file:///D:/temp ) ou um arquivo local (por exemplo, file:///D:/temp/homepage.html ) e tudo funciona bem.

No entanto, sempre que houver uma barra nos URLs válidos, posso inserir muito mais e tudo ainda funciona bem. Por exemplo:

file:///D://///////////////////temp///////////////MiscTests///////

Veja também a captura de tela do Chrome:

No começo, pensei que isso fosse um bug no Chrome, mas o Opera, o Edge e o Firefox também fazem a mesma coisa, portanto, suponho que a URL seja perfeitamente válida.

Como um problema relacionado, é importante notar que esses navegadores também permitem várias barras em um URL da Web (por exemplo, https:///////////////////www.amazon.com ), embora nesse cenário o URL na barra de endereço seja corrigido para https://www.amazon.com . Portanto, não são apenas URLs de arquivos que permitem muitas barras.

Existe uma boa razão para os navegadores permitirem todas essas barras, ou é uma falha em algumas especificações que não pode ser corrigida?

    
por skomisa 17.01.2018 / 10:01

1 resposta

3

RFC3986, seção 3.3 diz que várias barras são válidas em URLs.

O / em um URL determina onde os segmentos do URL são divididos. Uma barra dupla (fora do delimitador de autoridade, que é o primeiro // ) produziria um segmento vazio, que de acordo com o RFC 2396 pode ser ignorado. Tecnicamente, um servidor da Web poderia lançar uma exceção sobre isso, mas os usuários esperam que os servidores da Web manipulem esse tipo de coisa, de modo que ele simplesmente o ignora.

Btw, isso também acontece no Unices (que a web foi modelada depois):

A seção única de especificação Unix 3.266 define que várias barras podem ser consideradas como uma :

A character string that is used to identify a file. In the context of IEEE Std 1003.1-2001, a pathname consists of, at most, {PATH_MAX} bytes, including the terminating null byte. It has an optional beginning slash, followed by zero or more filenames separated by slashes. A pathname may optionally contain one or more trailing slashes. Multiple successive slashes are considered to be the same as one slash.

    
por 17.01.2018 / 10:39