Po kliknięciu tego linku ( http://a//%%30%30
) w Google Chrome, Chrome łamie i zamyka wszystkie karty i instancje.
Ale w niektórych przypadkach wystarczy najechać kursorem na link, a karta zawiesza się.
Co się stanie, gdy zatrzymam kursor myszy nad tym linkiem? Chodzi mi o to, co Chrome robi po najechaniu myszką na link?
google-chrome
crash
LINQ
źródło
źródło
Odpowiedzi:
Katastrofa jest wynikiem niedawno odkrytych błędów w Chrome - oraz innych przeglądarek WebKit * - specyficznie związane albo (!)
%%30%30
,%0%30
Albo%%300
jako część zawartości, co wewnętrznie wszystko skończy się reprezentujący ten sam symbol: zerowy . Możesz przeczytać więcej o błędzie tutaj .To nie jest błąd, który wpływa na większość linków, więc ogólnie nie musisz się martwić o najechanie kursorem na linki.
Uwagi:
* Inne przeglądarki WebKit to Safari, Opera, Steam Browser, Midori, S60 (Symbian), Blackberry Browser i Playstation 3 - ale nie Firefox, Internet Explorer lub Edge.
Edycja: Ten błąd został teraz naprawiony w Chrome 45.0.2454.101, jak wskazuje Deltik .
Więcej o tym, co się dzieje
Problem związany jest z canonicalizerem URL , który działa, gdy tylko umieścisz kursor nad linkiem - być może do wyświetlania linku na pasku stanu przeglądarki i do wstępnego pobrania strony internetowej, aby ładowała się szybciej po kliknięciu.
Jeśli chodzi o rolę kanonizatora adresów URL:
gdy adres URL jest zapisywany
HTML
, może być napisany w formie takiej jak/home
lub../../home
, ale przeglądarki muszą tłumaczyć ten adres URL na coś z protokołem i domeną, jakhttp://superuser.com/home
. Ponadto adres URL może zawierać sekwencje specjalne URL, które muszą zostać przetłumaczone , a te sekwencje kodowane są w procentach , np%%30%30
. (Bardziej wyczerpująca lista znaków ucieczki tutaj ).Funkcjonalność obsługi tego tłumaczenia URL -a kończy się awarią, ponieważ otrzymuje dane, których deweloperzy nie oczekiwali / nie obsłużyli.
Oto podsumowanie zmiany kodu, która rozwiązała problem:
źródło
URL canonicalizer
, który najwyraźniej zaczyna działać, gdy tylko umieścisz kursor nad linkiem, być może w celu wyświetlenia linku na pasku stanu przeglądarki? Nie mogę dać ci pewnej odpowiedzi, jednak gdy URL jest zapisany w HTML, może być napisany w formie takiej jak/home
lub../../home
, ale przeglądarki muszą przetłumaczyć ten URL na coś z protokołem i domeną, tak jakhttp://superuser.com/home
, więc może obsługa funkcjonalności, która kończy się awarią, ponieważ otrzymuje nieoczekiwane dane wejściowe?Jak mówi Fabio Turati,
Jednak z twojego postu i komentarza myślę, że bardziej martwi Cię to, czy Chrome łączy się z linkiem w tle. Tak , podobnie jak inne nowoczesne przeglądarki ( Firefox , Opera ). Możesz wyłączyć pobieranie wstępne w preferencjach Chrome lub zainstalować uBlock Origin, aby uzyskać więcej ustawień prywatności.
źródło
Chciałem wyjaśnić, co dokładnie się tutaj dzieje.
Zasadniczo% 30 to 0 zakodowane w adresie URL, a% 00 to NULL zakodowane w adresie URL (który jest wyświetlany jako binarnie jako 0000 0000). Więc jeśli masz adres URL z zagnieżdżonym kodowanym znakiem, który będzie dekodowany do NULL, błąd występuje.
Chrome dokonuje kanonizacji adresu URL (źródło: https://code.google.com/p/chromium/issues/detail?id=533361#c13 ):
Dlatego adres URL jest najpierw uważany za prawidłowy, ale po usunięciu niektórych danych prywatnych jest unieważniany. Jednak po usunięciu tych danych funkcja, która wywołała ten konkretny kod, oczekuje poprawnego adresu URL.
Jednym z powodów, dla których ten adres URL jest uważany za nieprawidłowy, jest to, że NULL jest używany w wielu starszych programach i językach do wskazania końca łańcucha (ponieważ w zasadzie jest to 8 zer w linii, co jest łatwe do wykrycia dla komputera).
źródło