Chrome'daki bir bağlantının üzerine geldiğimde ne olur?


40

http://a//%%30%30Google Chrome'da bu bağlantı ( ) tıklandığında, Chrome tüm sekmeleri ve örnekleri kırar ve kapatır.

Ancak, bazı durumlarda sadece bağlantının üzerine gelmem gerekiyor ve sekme çöküyor.

Bu bağlantının üzerine geldiğimde ne olur? Yani, bir link üzerine gelindiğinde Chrome ne yapar?


12
İşte
kromda


Hata olduğu değil (Mac OS 10.10.5 Chrome en azından kilitlenmeye devam) Krom 45.0.2454.101 sabit.
matematik

Yanıtlar:


42

Kilitlenme nedeniyle son zamanlarda keşfedilen hatadan olan Chrome ve diğer - WebKit tarayıcılara (!) * - özellikle ya ilişkin %%30%30, %0%30veya %%300URL parçası olarak dahilen tüm son aynı simgeyi temsil up: boş . Burada hata hakkında daha fazla bilgi edinebilirsiniz .

Çoğu bağlantıyı etkileyen bir hata değildir, bu yüzden genellikle bağlantıların üzerine gelmek konusunda endişelenmenize gerek yoktur.

Notlar:
* Diğer WebKit tarayıcıları Safari, Opera, Steam Tarayıcı, Midori, S60 (Symbian), Blackberry Tarayıcı ve Playstation 3'ün tarayıcısını içerir - ancak Firefox, Internet Explorer veya Edge'i içermez.

Düzenleme: Bu hata, Chrome 45.0.2454.101'de Deltik'in işaret ettiği gibi düzeltildi .

Olanlar hakkında daha fazlası

Sorun, bir bağlantının üzerine geldiğiniz anda çalışan - muhtemelen tarayıcının durum çubuğunda bağlantıyı görüntülemek ve web sayfasını önceden tıklatmak için tıklandığında daha hızlı yüklenmesini sağlamak için çalışan URL kural koyucusuyla ilgilidir.

URL kurallaştırıcısının rolü için:
Bir URL yazıldığında HTML, /homeveya gibi bir formda yazılabilir ../../home, ancak tarayıcıların bu URL'yi, gibi bir protokol ve etki alanı olan bir şeye çevirmeleri gerekir http://superuser.com/home. Ayrıca URL içerebilir URL Escapes ihtiyaç edilecek bu tercüme ve bu kaçar vardır yüzde kodlanmış gibi %%30%30. (URL daha detaylı bir listesi kaçar burada ).
Bu URL çevirisini işleme işlevi işlevsellik çökmesine neden oluyor, çünkü geliştiricilerin beklemediği / ilgilenmediği girdileri alıyor.

İşte sorunu düzelten kod değişikliğinin bir özeti:

URL yollarındaki sorunlu iç içe çıkışları doğru şekilde işleyin.

Spesifik olarak, girişte çıkmak, yeni bir çıkış dizisi içeren çıkış URL'sine yol açarsa, örneğin "%% 30% 30" girişini "% 00" girişine dönüştürürse, çıktının sağlanması için '%' başından "% 25" olarak çıkın dizi, yeni bir geçerli kaçış dizisi olarak ele alınmaz.

Bu, aynı URL’yi ikinci kez kanonlaştırmanın üzerinde değişiklik yapmamasını sağlar; bu, hem hata ayıklama hem de sürüm oluşturmada çeşitli yerlerde çökmelerden ve diğer hatalardan kaçınmak için önemlidir.


3
Netlik açısından, FireFox veya IE 11 ile sorun yok
Dave

6
Opera'yı göz önünde bulundurmak, Chrome'un da çökmesine neden olan şok edici olmayan bir motora dayanıyor. Birden fazla renderleme motoruna sahip olmanın nedeni budur.
Ramhound

8
Ama neden vurgulu oluyor ? Demek istediğim, bir linki gezdirdiğimde arama yok, neden çöküyor?
LINQ

4
Hataya neyin neden olduğu henüz belli değil, ancak bazıları bağlantının üzerine geldiğiniz URL canonicalizeranda, belki de tarayıcının durum çubuğunda bağlantıyı görüntülemek için görünüşte yayınlanmaya başladığını gösteriyor. Size kesin bir cevap veremem, ancak bir URL HTML’de yazıldığında, /homeveya gibi bir formda yazılabilir ../../home, ancak tarayıcıların bu URL’yi bir protokol ve etki alanı olan bir şeye http://superuser.com/home, yani Belki de beklenmedik bir girdi aldığı için kilitlenme ile sonuçlanan işlevselliktir?
miyalys 24:15 '

15
@ JéfersonBueno Bir bağlantının üzerine geldiğinizde, Chrome bunu sol alt köşede görüntüler. Bu, özel olarak kodlanmış karakterlerin "çevirisi" de dahil olmak üzere bir miktar işlem gerektirir. Bu işlem bozuk ve tüm programın çökmesine neden oluyor.
Fabio, Monica

11

Fabio Turati'nin dediği gibi

Bir bağlantının üzerine geldiğinizde, Chrome bunu sol alt köşede görüntüler. Bu, özel olarak kodlanmış karakterlerin "çevirisi" de dahil olmak üzere bir miktar işlem gerektirir.

Ancak, yayınladığınız ve yorumunuzdan, Chrome'un arka plandaki bağlantıya bağlanıp bağlanmadığı konusunda daha fazla endişe duyduğunuzu düşünüyorum. Öyle yapar , diğer modern tarayıcıları da yapar ( Firefox , Opera ). Chrome'un tercihlerinde önceden taramayı devre dışı bırakmak veya daha fazla gizlilik ayarı elde etmek için uBlock Origin'i kurmak isteyebilirsiniz .


6

Burada tam olarak ne olduğuyla ilgili daha fazla açıklama yapmak istedim.

Temel olarak,% 30 bir URL kodlu 0'dır ve% 00 bir URL kodlu NULL'dur (ikili olarak 0000 0000 olarak görüntülenir). Bu nedenle, NULL kodunu çözecek iç içe kodlanmış bir karaktere sahip bir URL'niz varsa, hata oluşur.

Chrome, bir URL'yi kurallaştırırken aşağıdakileri yapar (kaynak: https://code.google.com/p/chromium/issues/detail?id=533361#c13 ):

  • "Http: //a.com/%%30%30" giriş dizgisi " http://a.com/%00 " adresinden çıkarıldı ve geçerli bir GURL olarak kabul edildi.
  • Bu GURL sonunda kullanıcı adını ve şifreyi silmek için ReplaceComponents () öğesini çağıran GURLToDatabaseURL () öğesine gönderilir.
  • ReplaceComponents () URL'yi yeniden kanonize eder.
  • Yolun kanonikleştirilmesi, "% 00" sırasına çarpar, çıkmaz, bunun URL’lerde geçersiz olan, kaçan bırakır ancak sonuçtaki URL’yi geçersiz olarak işaretler.
  • GURLToDatabaseURL () 'ye geri döndüğümüzde, yeni URL’de .spec () yöntemini çağırır, geçerli olmasını bekler, çünkü giriş URL’nizin geçerli olacağı garanti edilmiştir ve sadece kullanıcı adı ve şifreyi kaldırdık. Bu DECKLER.

Bu nedenle, URL ilk önce geçerli sayılır, ancak belirli özel verileri kaldırdıktan sonra geçersiz olur. Ancak, bu veriler kaldırıldıktan sonra, söz konusu kodu çağıran işlev geçerli bir URL bekler.

Bu URL'nin geçersiz sayılmasının nedeninin bir kısmı, NULL'un bir dizenin sonunu belirtmek için bir dizi eski yazılım ve dilde kullanılmasıdır (çünkü bir bilgisayar için algılanması kolay olan bir satırdaki temelde 8 sıfırdır).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.