2012-05-03 17 views
9

TŁOróżnych zachowań leczenia (backslash) w url przez Firefoksa i Chrome

Według mojego doświadczenia, kiedy mój ubuntu stacja robocza jest skonfigurowana na domenie Active Directory, nazwa użytkownika stworzony dla mnie było według następujący wzór.

nazwa_domeny \ nazwa_użytkownika

Korzystanie z UserDir rozszerzenia Apache na Linux będzie wymagać, aby użyć nazwy użytkownika w adresie URL, aby uzyskać dostęp do public_html w katalogu domowym.

http://localhost/~domain_name\user_name

PROBLEM:

Chrome konwertuje wszystkie backslash '\' znaków w adresie URL do ukośnik '/' i uzyskaną url staje jako pod tym jest zupełnie inny i zawsze wyniki nie znaleziono.

http://localhost/~domain_name/user_name

Firefox Natomiast nie konwertuje z powrotem do ukośnik ukośnik więc żądania HTTP do zamierzonego celu jest obsługiwana przez serwer WWW na.

Common solution is to encode back slash in %5C. 

PROBLEM B:

Jeśli używamy podobną ścieżkę (zawierający \ w ścieżce) w CSS @import konstruktem, proces importu pliku css jak HTTP GET nie powiodła się przez zgłoszenie Błąd 404 i adres URL zgłoszony w błędzie 404 całkowicie pomijają obecność \. Oznacza to, że został usunięty z adresu URL przed wywołaniem żądania GET.

Takie zachowanie jest typowe w przeglądarkach Firefox i Chrome. Ale mają nietypowe rozwiązania.

Firefox potrzebuje ucieczki z powrotem ukośnik do pracy w procesie importowania css.

@import url ("http://localhost/~domain_name\\user_name/path/to/css");

Chrome jak zwykle potrzebuje zakodowanego rozwiązania back slash.

@import url ("http://localhost/~domain_name%5Cuser_name/path/to/css");

  • Co jest zunifikowanego rozwiązania do czynienia z \ w adresie URL?
  • Czy istnieje sposób na uniknięcie pojawienia się w nazwie użytkownika?

Odpowiedz

7

Ujednoliconym rozwiązaniem problemu z ukośnikiem odwrotnym w adresie URL jest użycie% 5C. RFC 2396 w ogóle nie pozwalał na tę postać w adresach URL (więc każde zachowanie dotyczące tej postaci było po prostu sposobem na usunięcie błędu). RFC 3986 pozwala na to, ale nie jest szeroko stosowany, między innymi dlatego, że nie jest dokładnie zgodny z istniejącymi procesorami URL.

W szczególności Chrome robi to samo, co IE: zakłada, że ​​chodziło Ci o ukośnik w przód za każdym razem, gdy odkryłeś, jak to odkryłeś, ponieważ tak robią ścieżki do plików Windows.

+0

Ale to nie zadziała w przypadku css @import url() dla przeglądarki Firefox. –

+0

Dlaczego nie? Powinien działać tak daleko, jak to możliwe. –

+0

Ale testowałem to. –

2

Ten backslash problem auto konwersji ustalone w Chrome w wersji> = 53.0.2785.116.

Teraz ukośniki odwrotne są traktowane poprawnie jako % 5C.

+0

Jestem prawie pewien, że nie. Nadal dzieje się w Chrome 62.0.3202.89 podczas pisania w pasku adresu lub przy użyciu 'window.location =" ";' w konsoli DevTools. – bit2shift