Điều gì xảy ra khi tôi di chuột qua một liên kết trong Chrome?


40

Khi liên kết này ( http://a//%%30%30) được nhấp vào Google Chrome, Chrome sẽ ngắt và đóng tất cả các tab và phiên bản.

Nhưng, trong một số trường hợp, tôi chỉ cần di chuột qua liên kết và tab bị hỏng.

Điều gì xảy ra khi tôi di chuột qua liên kết này? Ý tôi là, Chrome làm gì khi một liên kết được di chuột qua?


12
Đây là một video Tom Scott tuyệt vời nói về những gì anh ấy nghĩ đang xảy ra trong chrome youtube.com/watch?v=0fw5Cyh21TE
DLeh

5
Lỗi này đã được sửa trong Chrome 45.0.2454.101 . Nó vẫn có mặt trong Chrome 45.0.2454.99 .
Deltik

Lỗi không được sửa trong Chrome 45.0.2454.101 (ít nhất là trên Mac OS 10.10.5 Chrome vẫn bị lỗi).
toán

Câu trả lời:


42

Vụ tai nạn là do một lỗi thời gian gần đây phát hiện trong Chrome - và các trình duyệt WebKit * - cụ thể liên quan đến một trong hai (!) %%30%30, %0%30Hoặc %%300như là một phần của URL, mà trong nội bộ tất cả kết thúc lên đại diện cho biểu tượng giống nhau: rỗng . Bạn có thể đọc thêm về lỗi ở đây .

Đây không phải là một lỗi ảnh hưởng đến hầu hết các liên kết, vì vậy bạn thường không phải lo lắng về việc di chuột qua các liên kết.

Lưu ý:
* Các trình duyệt WebKit khác bao gồm Safari, Opera, Steam Browser, Midori, S60 (Symbian), Trình duyệt Blackberry và trình duyệt của Playstation 3 - nhưng không phải Firefox, Internet Explorer hoặc Edge.

Chỉnh sửa: Lỗi này hiện đã được sửa trong Chrome 45.0.2454.101 khi Deltik chỉ ra.

Thêm về những gì xảy ra

Vấn đề liên quan đến trình chuẩn hóa URL , nó chạy ngay khi bạn di chuột qua một liên kết - có thể để hiển thị liên kết trên thanh trạng thái của trình duyệt và để tìm nạp trước trang web để tải nhanh hơn khi nhấp vào.

Đối với vai trò của trình chuẩn hóa URL:
Khi một URL được viết HTML, nó có thể được viết dưới dạng /homehoặc ../../home, nhưng các trình duyệt cần dịch URL này sang một cái gì đó có giao thức và tên miền cũng vậy http://superuser.com/home. Hơn nữa, URL có thể chứa các Thoát hiểm URL cần được dịch và các lối thoát này được mã hóa theo phần trăm , như thế nào %%30%30. (Một danh sách đầy đủ hơn các URL thoát ở đây ).
Chức năng xử lý bản dịch URL này là những gì kết thúc sự cố, bởi vì nó nhận được đầu vào mà các nhà phát triển không mong đợi / xử lý.

Dưới đây là tóm tắt về thay đổi mã đã khắc phục sự cố:

Xử lý chính xác các lối thoát lồng nhau có vấn đề trong các đường dẫn URL.

Cụ thể, nếu không chú ý trong đầu vào dẫn đến URL đầu ra chứa chuỗi thoát mới, ví dụ: chuyển đổi đầu vào "%% 30% 30" thành "% 00", hãy thoát '%' hàng đầu thành "% 25" để đảm bảo đầu ra trình tự không được coi là một chuỗi thoát hợp lệ mới.

Điều này đảm bảo rằng việc chuẩn hóa cùng một URL lần thứ hai sẽ không thực hiện thay đổi đối với URL đó, điều này rất quan trọng để tránh sự cố và các lỗi khác ở nhiều nơi trong cả bản dựng gỡ lỗi và phát hành.


3
Để rõ ràng, không có vấn đề gì với FireFox hoặc IE 11
Dave

6
Xem xét Opera dựa trên công cụ Chrome không gây sốc khi nó cũng gặp sự cố. Đó là lý do có nhiều công cụ kết xuất là một điều tốt.
Ramhound

8
Nhưng tại sao nó lại xảy ra khi di chuột ? Ý tôi là, khi tôi di chuột một liên kết, không có tìm kiếm, vậy tại sao nó bị treo?
LINQ

4
Vẫn chưa rõ nguyên nhân gây ra lỗi, nhưng một số người cho rằng nó có liên quan đến URL canonicalizer, dường như bắt đầu chạy ngay khi bạn di chuột qua một liên kết, có thể để hiển thị liên kết trong thanh trạng thái của trình duyệt? Tôi không thể cho bạn một câu trả lời nhất định, tuy nhiên khi một URL được viết bằng HTML, nó có thể được viết dưới dạng /homehoặc ../../home, nhưng các trình duyệt cần dịch URL này sang một cái gì đó có giao thức và như http://superuser.com/homevậy, như vậy, có thể xử lý chức năng đó là những gì kết thúc sự cố, bởi vì nó nhận được đầu vào bất ngờ?
miyalys

15
@ JéfersonBueno Khi bạn di chuột qua một liên kết, Chrome sẽ hiển thị nó ở góc dưới bên trái. Điều này đòi hỏi một số xử lý, bao gồm cả "bản dịch" các ký tự được mã hóa đặc biệt. Quá trình xử lý này có lỗi và khiến toàn bộ chương trình bị sập.
Fabio nói Phục hồi lại

11

Như Fabio Turati nói,

Khi bạn di chuột qua một liên kết, Chrome sẽ hiển thị nó ở góc dưới bên trái. Điều này đòi hỏi một số xử lý, bao gồm cả "bản dịch" các ký tự được mã hóa đặc biệt.

Tuy nhiên, từ bài đăng và nhận xét của bạn, tôi nghĩ rằng bạn quan tâm nhiều hơn đến việc Chrome có kết nối với liên kết trong nền không. Nó cũng vậy, các trình duyệt hiện đại khác ( Firefox , Opera ) cũng vậy. Bạn có thể muốn tắt tính năng tìm nạp trước trong tùy chọn của Chrome hoặc cài đặt uBlock Origin để có thêm cài đặt bảo mật.


6

Tôi muốn làm rõ thêm về những gì chính xác xảy ra ở đây.

Về cơ bản,% 30 là mã hóa URL 0 và% 00 là NULL được mã hóa URL (được hiển thị dưới dạng nhị phân là 0000 0000). Vì vậy, nếu bạn có một URL có ký tự được mã hóa lồng nhau sẽ giải mã thành NULL, lỗi sẽ xảy ra.

Chrome thực hiện các thao tác sau khi chuẩn hóa URL (nguồn: https://code.google.com.vn/p/chromium/issues/detail?id=533361#c13 ):

  • Chuỗi đầu vào "http: //a.com/%%30%30" không được bỏ qua thành " http://a.com/%00 " và được coi là một GURL hợp lệ.
  • GURL này cuối cùng được gửi đến GURLToDatabaseURL (), gọi thay thếComponents () trên đó để xóa tên người dùng và mật khẩu.
  • AlternComponents () tái chuẩn hóa URL.
  • Hợp quy hóa đường dẫn đạt trình tự "% 00", không hiển thị, thấy đây là 0 char không hợp lệ trong các URL, khiến nó thoát, nhưng đánh dấu URL kết quả là không hợp lệ.
  • Khi chúng tôi quay lại GURLToDatabaseURL (), nó gọi .spec () trên URL mới, hy vọng nó hợp lệ, vì URL đầu vào được đảm bảo là hợp lệ và chúng tôi chỉ xóa tên người dùng và mật khẩu. DCHECK này.

Vì vậy, URL đầu tiên được coi là hợp lệ, nhưng sau khi xóa một số dữ liệu riêng tư, nó bị vô hiệu. Tuy nhiên, sau khi dữ liệu đó bị xóa, chức năng được gọi là mã cụ thể đó sẽ mong đợi một URL hợp lệ.

Một phần lý do tại sao URL này được coi là không hợp lệ là do NULL được sử dụng trong một số phần mềm và ngôn ngữ cũ hơn để chỉ sự kết thúc của chuỗi (vì về cơ bản, nó có 8 số 0 trong một dòng, rất dễ phát hiện cho máy tính).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.