Các dịch vụ URL ngắn hoạt động như thế nào?


105

Các dịch vụ như TinyURL hoặc Metamark hoạt động như thế nào?
Có phải họ chỉ liên kết khóa URL nhỏ với một trang web [ảo?] Chỉ cung cấp "chuyển hướng HTTP" đến URL ban đầu không? hoặc là có nhiều "ma thuật" hơn cho nó?

[từ ngữ gốc] Tôi thường sử dụng các dịch vụ rút ngắn URL như TinyURL, Metamark và những dịch vụ khác, nhưng mỗi lần như vậy, tôi lại tự hỏi các dịch vụ này hoạt động như thế nào. Họ tạo một tệp mới sẽ chuyển hướng đến một trang khác hay họ sử dụng tên miền phụ?


1
Để diễn đạt lại câu hỏi [không phải]: "Các dịch vụ như TinyURL hoạt động như thế nào? Có phải chúng chỉ liên kết khóa URL nhỏ với một trang web [ảo?] Chỉ cung cấp" chuyển hướng HTTP "đến URL gốc không? Đây có phải là những gì bạn đang hỏi?
mjv

1
Các url rút gọn có bao giờ hết hạn không? (tức là các mục nhập cơ sở dữ liệu cho các URL đó bị xóa khỏi máy chủ)
thd

2
@thd: có, nhưng nó có thể phụ thuộc vào lượt truy cập (hàng ngày) và chính sách của nhà cung cấp dịch vụ url ngắn. Họ cũng có thể cho phép không bao giờ hết hạn, một số yêu cầu thành viên cho điều đó.
Abel

Có thể có bản sao của Công cụ rút ngắn URL hoạt động như thế nào?
roottraveller

Câu trả lời:


224

Không, họ không sử dụng tệp. Khi bạn nhấp vào một liên kết như vậy, một yêu cầu HTTP sẽ được gửi đến máy chủ của họ với URL đầy đủ, như http://bit.ly/duSk8wK (các liên kết đến câu hỏi này). Họ đọc phần đường dẫn (ở đây duSk8wK), ánh xạ tới cơ sở dữ liệu của họ. Trong cơ sở dữ liệu, họ tìm thấy mô tả (đôi khi), tên của bạn (đôi khi) và URL thực. Sau đó, họ đưa ra một chuyển hướng, là phản hồi HTTP 302 và URL mục tiêu trong tiêu đề.

Chuyển hướng trực tiếp này là quan trọng. Nếu bạn sử dụng tệp hoặc lần đầu tiên tải HTML và sau đó chuyển hướng, trình duyệt sẽ thêm TinyUrl vào lịch sử, đây không phải là điều bạn muốn. Ngoài ra, trang web được chuyển hướng đến sẽ thấy liên kết giới thiệu (trang web mà bạn đến từ ban đầu) là trang web có liên kết TinyUrl (tức là, twitter.com, trang web của riêng bạn, cho dù liên kết đó ở đâu). Điều này cũng quan trọng để chủ sở hữu trang web có thể biết mọi người đến từ đâu. Điều này cũng sẽ không hoạt động nếu một trang được tải mà chuyển hướng.

PS: có nhiều loại chuyển hướng hơn. HTTP 301 có nghĩa là: chuyển hướng vĩnh viễn. Nếu điều đó xảy ra, trình duyệt sẽ không yêu cầu trang web bit.ly hoặc TinyUrl nữa và các trang web đó muốn tính số lần truy cập. Đó là lý do tại sao HTTP 302 được sử dụng, đây là một chuyển hướng tạm thời. Trình duyệt sẽ hỏi lại TinyUrl.com hoặc bit.ly để có thể đếm số lần truy cập cho bạn (một số dịch vụ url nhỏ cung cấp điều này).


2
Thật sự tôi nghĩ, Bit.ly sử dụng HTTP 301 thay vì 302 (I cuối cùng nghe)
Kenny Cason

1
Vì bit.ly sẽ không cho phép bạn thay đổi nơi một trong các URL của chúng trỏ đến, nên 301 có ý nghĩa. Không cần nhớ phiên bản bit.ly và kiểm tra lại.
Joost Schuur

11
@KennyCason / @Joost Schuur: tuy nhiên, nó thực sự là HTTP 301 được sử dụng với một dấu thời gian. Điều này biến nó thành Movedkhông Moved Permanently. Đây là một sự khác biệt tinh tế. Bằng cách thêm dấu thời gian, trình duyệt sẽ kiểm tra xem tài nguyên có bị thay đổi hay không khi đạt đến thời gian chờ này. Những người khác, như is.gd, sử dụng bình thường 301 Moved Permanentlyvà trình duyệt không cần kiểm tra lại (nhưng thường thì sẽ như vậy). Cuối cùng, các dịch vụ như url4.eu hoàn toàn không chuyển hướng mà hiển thị cho bạn một quảng cáo trước. Với 301, các dịch vụ vẫn có thể tính số lượng khách truy cập , nhưng không phải tất cả các lần truy cập.
Abel

6
URL bitly mẫu hiện là URL thực và thực sự chuyển hướng trở lại câu hỏi này ;-) Xem bitly.com/duSk8wK+ để biết trang thông tin.
Ronald

1
@Costa: có nhiều cách đếm số lần nhấp chuột, có thể nó theo dõi ID thẻ mạng của bạn, đây là một cách theo dõi xem một yêu cầu có đến từ cùng một máy tính hay không. Có thể giả mạo hoặc thay đổi ID đó, nó không phải là dễ dàng. Ngoài ra, có thể nó theo dõi hoặc sử dụng cookie của bên thứ ba đã được đặt trước đó và cho cùng một người dùng trên các trình duyệt khác nhau, bạn có thể kiểm tra bằng cách xóa tất cả dữ liệu phiên và sử dụng trình duyệt ẩn danh.
Abel

110

Những người khác đã trả lời cách hoạt động của chuyển hướng nhưng bạn cũng nên biết cách chúng tạo ra các url nhỏ của chúng. Bạn sẽ nghe nhầm rằng họ tạo một hàm băm của URL để tạo mã duy nhất cho URL rút gọn. Điều này không chính xác trong hầu hết các trường hợp, họ không sử dụng thuật toán băm (nơi bạn có thể có xung đột).

Hầu hết các dịch vụ rút ngắn URL phổ biến chỉ cần lấy ID trong cơ sở dữ liệu của URL và sau đó chuyển đổi nó thành Cơ sở 36 [a-z0-9] (không phân biệt chữ hoa chữ thường) hoặc Cơ sở 62 (phân biệt chữ hoa chữ thường).

Một ví dụ đơn giản về Bảng cơ sở dữ liệu TinyURL:

ID       URL                           VisitCount
 1       www.google.com                        26
 2       www.stackoverflow.com               2048
 3       www.reddit.com                        64
...
 20103   www.digg.com                         201
 20104   www.4chan.com                         20

Các khung công tác web cho phép định tuyến linh hoạt giúp việc xử lý URL đến thực sự dễ dàng (Ruby, ASP.NET MVC, v.v.).

Vì vậy, trên máy chủ web của bạn, bạn có thể có một hành động định tuyến trông giống như (mã giả):

Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);

Định tuyến bất kỳ yêu cầu nào đến máy chủ của bạn có bất kỳ văn bản nào sau tên miền www.mytinyurl.com của bạn tới phương thức liên kết của bạn, RouteURL. Nó cung cấp văn bản được chuyển vào sau dấu gạch chéo trong URL của bạn cho phương thức đó.

Vì vậy, giả sử bạn đã yêu cầu: www.mytinyurl.com/fif

"Năm mươi" sau đó sẽ được chuyển tới phương thức của bạn, RouteURL (Chuỗi UrlID). Sau đó, RouteURL sẽ chuyển đổi "five" thành base10 tương đương, 20103 và một yêu cầu cơ sở dữ liệu sẽ được thực hiện để chuyển hướng đến bất kỳ URL nào được lưu trữ dưới ID 20103 (trong trường hợp này là www.digg.com). Bạn cũng sẽ tăng số lượt truy cập cho Digg lên một lượt trước khi chuyển hướng đến đúng URL.

Đây là một ví dụ thực sự đơn giản nhưng bạn sẽ có thể có được ý tưởng chung.


12
Cảm ơn vì lời giải thích tốt đẹp. Vậy điều gì sẽ xảy ra khi ai đó cố gắng tạo một URL ngắn cho một URL dài đã tồn tại? Họ có thực hiện tìm kiếm toàn văn trên cơ sở dữ liệu không? Tôi không nghĩ như vậy vì nó sẽ tốn quá nhiều thời gian. Phương pháp dựa trên băm hoặc thông báo thông báo trông thực tế hơn.
Piyush Kansal

@PiyushKansal bạn có thể sử dụng hàm băm bên trong để thực hiện O(1)tra cứu để tìm các bản sao; và sau đó định tuyến URL nhỏ hiện có cho điều đó hoặc có thể chọn tạo một URL mới. Theo như tôi có thể nói, goo.glsử dụng lại các url nhỏ cho cùng một URL; hãy thử điều này ở cuối của bạn cho trang này: Bạn có nhận được điều này goo.gl/8gVb8Xkhông >> ?
Kingz

Họ xử lý các tham số url như thế nào? Ví dụ: www.digg.com?filter=123
Ronen

7

Như một phần mở rộng cho câu trả lời @A Salcedo:

Một số dịch vụ rút gọn url (Tinyarro.ws) đi đến cực điểm bằng cách sử dụng Unicode (UTF-8) để mã hóa các ký tự trong url rút gọn - cho phép số lượng trang web cao hơn trước khi phải thêm ký hiệu bổ sung. Vì hầu hết UTF-8 được chấp nhận sử dụng ( (IRI) RFC 3987 được xử lý bởi hầu hết các trình duyệt ) nên chuyển từ 62các trang web trên mỗi ký hiệu sang ~ 1,112,064.

Để đặt trong viễn cảnh, người ta có thể mã hóa 1.2366863e + 12 trang web bằng 2 ký hiệu ( 1,112,064*1,112,064) - vào tháng 11 năm 2009, các liên kết rút gọn trên bit.lyđã được truy cập hàng 2.1tỷ lần ( Vào khoảng thời gian đó, bit.ly và TinyURL là các dịch vụ rút ngắn URL được sử dụng rộng rãi nhất ) . ít hơn ~ 600 lần so với bạn có thể chỉ vừa 2 ký hiệu, vì vậy trong toàn bộ thời gian tồn tại của tất cả các dịch vụ rút gọn url, nó sẽ kéo dài tối thiểu 20 năm nữa cho đến khi thêm ký hiệu thứ ba.


5

Nói một cách dễ hiểu, công cụ rút ngắn URL ánh xạ một chuỗi ký tự dài tùy ý (url gốc, dài ngoằn nghèo) thành một chuỗi ký tự ngắn và mượt mà. Điều này không có gì khác ngoài Hashing, được sử dụng phổ biến nhất để tạo bảng tra cứu, HashMap, md5 Hash cho mục đích mật mã, v.v.

Để hiểu quy trình Rút ngắn URL, tôi đã tạo một dự án demo trên GitHub và cũng là một bài đăng trên blog. Hãy tham khảo điều này và cho tôi biết nếu nó hữu ích.

Bài đăng trên Blog: Rút ngắn URL

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.