บริการ URL แบบสั้นทำงานอย่างไร


105

บริการเช่นTinyURLหรือMetamarkทำงานอย่างไร
พวกเขาเพียงแค่เชื่อมโยงคีย์ URL เล็ก ๆ กับหน้าเว็บ [เสมือน?] ซึ่งให้ "การเปลี่ยนเส้นทาง HTTP" ไปยัง URL เดิมเท่านั้นหรือไม่ หรือมี "เวทมนตร์" มากกว่านี้หรือไม่?

[ข้อความต้นฉบับ] ฉันมักใช้บริการย่อ URL เช่น TinyURL, Metamark และอื่น ๆ แต่ทุกครั้งที่ทำฉันสงสัยว่าบริการเหล่านี้ทำงานอย่างไร พวกเขาสร้างไฟล์ใหม่ที่จะเปลี่ยนเส้นทางไปยังหน้าอื่นหรือใช้โดเมนย่อย?


1
หากต้องการเปลี่ยนข้อความ [non-] คำถาม: "บริการเช่น TinyURL ทำงานอย่างไรพวกเขาเพียงแค่เชื่อมโยงคีย์ URL เล็ก ๆ กับหน้าเว็บ [เสมือน?] ซึ่งให้" การเปลี่ยนเส้นทาง HTTP "ไปยัง URL ดั้งเดิมเท่านั้นหรือนี่คือสิ่งที่คุณ กำลังถาม?
mjv

1
URL ที่สั้นลงเคยหมดอายุหรือไม่? (เช่นรายการฐานข้อมูลสำหรับ URL เหล่านั้นจะถูกลบออกจากเซิร์ฟเวอร์)
THD

2
@thd: ใช่ แต่อาจขึ้นอยู่กับจำนวนการเข้าชม (รายวัน) และนโยบายของผู้ให้บริการ URL แบบสั้น นอกจากนี้ยังอาจอนุญาตให้ไม่มีวันหมดอายุบางคนขอให้เป็นสมาชิก
Abel

อาจซ้ำกันได้ของURL Shortener ทำงานอย่างไร
roottraveller

คำตอบ:


224

ไม่พวกเขาไม่ใช้ไฟล์ เมื่อคุณคลิกลิงก์เช่นนั้นคำขอ HTTP จะถูกส่งไปยังเซิร์ฟเวอร์ของพวกเขาพร้อมด้วย URL แบบเต็มเช่นhttp://bit.ly/duSk8wK (ลิงก์ไปยังคำถามนี้) พวกเขาอ่านส่วนเส้นทาง (ที่นี่duSk8wK) ซึ่งแมปกับฐานข้อมูล ในฐานข้อมูลพวกเขาพบคำอธิบาย (บางครั้ง) ชื่อของคุณ (บางครั้ง) และ URL จริง จากนั้นจึงออกการเปลี่ยนเส้นทางซึ่งเป็นการตอบสนอง HTTP 302 และ URL เป้าหมายในส่วนหัว

การเปลี่ยนเส้นทางโดยตรงนี้มีความสำคัญ หากคุณต้องใช้ไฟล์หรือโหลด HTML ก่อนแล้วเปลี่ยนเส้นทางเบราว์เซอร์จะเพิ่ม TinyUrl ลงในประวัติซึ่งไม่ใช่สิ่งที่คุณต้องการ นอกจากนี้ไซต์ที่เปลี่ยนเส้นทางไปยังจะเห็นผู้อ้างอิง (ไซต์ที่คุณมาจากเดิม) ว่าเป็นไซต์ที่ลิงก์ TinyUrl อยู่ (เช่น twitter.com ซึ่งเป็นไซต์ของคุณเองไม่ว่าลิงก์จะอยู่ที่ใดก็ตาม) สิ่งนี้สำคัญพอ ๆ กันเพื่อให้เจ้าของไซต์สามารถดูได้ว่าผู้คนมาจากไหน สิ่งนี้จะใช้ไม่ได้เช่นกันหากเพจถูกโหลดที่เปลี่ยนเส้นทาง

PS: การเปลี่ยนเส้นทางมีหลายประเภท HTTP 301 หมายถึง: เปลี่ยนเส้นทางถาวร หากเป็นเช่นนั้นเบราว์เซอร์จะไม่ขอไซต์ bit.ly หรือ TinyUrl อีกต่อไปและไซต์เหล่านั้นต้องการนับจำนวนการเข้าชม นั่นเป็นเหตุผลที่ใช้ HTTP 302 ซึ่งเป็นการเปลี่ยนเส้นทางชั่วคราว เบราว์เซอร์จะถาม TinyUrl.com หรือ bit.ly ทุกครั้งอีกครั้งซึ่งทำให้สามารถนับจำนวน Hit ให้คุณได้ (บริการ url เล็ก ๆ บางบริการมีให้)


2
จริงๆแล้วฉันคิดว่า Bit.ly ใช้ HTTP 301 แทน 302 (ครั้งสุดท้ายที่ฉันได้ยิน)
Kenny Cason

1
เนื่องจาก bit.ly ไม่ยอมให้คุณเปลี่ยนตำแหน่งที่หนึ่งใน URL ของพวกเขาชี้ไปที่ 301 จึงสมเหตุสมผล ไม่จำเป็นต้องจำเวอร์ชัน bit.ly แล้วตรวจสอบอีกครั้ง
Joost Schuur

11
@KennyCason / @Joost Schuur: แน่นอนว่าเป็น HTTP 301 ที่ใช้กับการประทับเวลา นี้จะเปลี่ยนมันเป็นไม่ได้Moved Moved Permanentlyนี่คือความแตกต่างที่ลึกซึ้ง เมื่อเพิ่มการประทับเวลาเบราว์เซอร์จะพิจารณาว่าควรตรวจสอบว่าทรัพยากรมีการเปลี่ยนแปลงหรือไม่เมื่อถึงระยะหมดเวลานี้ อื่น ๆ เช่น is.gd ใช้แบบปกติ301 Moved Permanentlyและเบราว์เซอร์ไม่จำเป็นต้องตรวจสอบซ้ำ (แต่มักจะ) สุดท้ายบริการเช่น url4.eu จะไม่เปลี่ยนเส้นทางเลย แต่จะแสดงโฆษณาให้คุณเห็นก่อน ด้วย 301 บริการยังคงสามารถนับผู้เยี่ยมชมที่ไม่ซ้ำกันได้ แต่ไม่ใช่จำนวนผู้เข้าชมทั้งหมด
Abel

6
URL ตัวอย่าง bitly ตอนนี้เป็นของจริงและเปลี่ยนเส้นทางกลับมาที่คำถามนี้จริง ๆ ;-) ดูbitly.com/duSk8wK+สำหรับหน้าข้อมูล
Ronald

1
@ คอสต้า: มีหลายวิธีในการนับคลิกเป็นไปได้ว่าจะติดตาม ID การ์ดเครือข่ายของคุณซึ่งเป็นวิธีการติดตามว่าคำขอมาจากคอมพิวเตอร์เครื่องเดียวกันหรือไม่ เป็นไปได้ที่จะปลอมหรือเปลี่ยน ID นั้นไม่สามารถเข้าใจผิดได้ นอกจากนี้ยังมีความเป็นไปได้ที่จะติดตามหรือใช้คุกกี้ของบุคคลที่สามที่ตั้งค่าไว้ก่อนหน้านี้และไปยังผู้ใช้คนเดียวกันในเบราว์เซอร์ต่าง ๆ ซึ่งคุณสามารถตรวจสอบได้โดยการล้างข้อมูลเซสชันทั้งหมดและใช้เบราว์เซอร์ที่ไม่ระบุชื่อ
Abel

110

คนอื่น ๆ ได้ตอบว่าการเปลี่ยนเส้นทางทำงานอย่างไร แต่คุณควรทราบด้วยว่าพวกเขาสร้าง URL เล็ก ๆ ของพวกเขาอย่างไร คุณจะเข้าใจผิดว่าพวกเขาสร้างแฮชของ URL เพื่อสร้างรหัสเฉพาะสำหรับ URL แบบย่อ สิ่งนี้ไม่ถูกต้องในกรณีส่วนใหญ่ไม่ได้ใช้อัลกอริทึมการแฮช (ซึ่งคุณอาจมีการชนกัน)

บริการย่อ URL ที่เป็นที่นิยมส่วนใหญ่จะใช้ ID ในฐานข้อมูลของ URL แล้วแปลงเป็น Base 36 [a-z0-9] (ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่) หรือฐาน 62 (พิจารณาตัวพิมพ์เล็กและใหญ่)

ตัวอย่างง่ายๆของตารางฐานข้อมูล 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

Web Frameworks ที่อนุญาตให้มีการกำหนดเส้นทางที่ยืดหยุ่นทำให้การจัดการ URL ขาเข้านั้นง่ายมาก (Ruby, ASP.NET MVC ฯลฯ )

ดังนั้นบนเว็บเซิร์ฟเวอร์ของคุณคุณอาจมีการดำเนินการเส้นทางที่ดูเหมือน (รหัสหลอก):

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

ซึ่งกำหนดเส้นทางคำขอที่เข้ามาใด ๆ ไปยังเซิร์ฟเวอร์ของคุณที่มีข้อความใด ๆ หลังจากโดเมนของคุณ www.mytinyurl.com ไปยังวิธีการที่เกี่ยวข้องของคุณ RouteURL มันให้ข้อความที่ส่งผ่านหลังจากเครื่องหมายทับใน URL ของคุณไปยังเมธอดนั้น

สมมติว่าคุณร้องขอ: www.mytinyurl.com/fif

จากนั้น "fif" จะถูกส่งต่อไปยังเมธอดของคุณ RouteURL (String UrlID) จากนั้น RouteURL จะแปลงค่า "fif" ให้เทียบเท่ากับ base10 ในปี 20103 และจะมีการร้องขอฐานข้อมูลเพื่อเปลี่ยนเส้นทางไปยัง URL ใดก็ตามที่จัดเก็บภายใต้ ID 20103 (ในกรณีนี้คือ www.digg.com) นอกจากนี้คุณยังสามารถเพิ่มจำนวนการเยี่ยมชมสำหรับ Digg ทีละรายการก่อนที่จะเปลี่ยนเส้นทางไปยัง URL ที่ถูกต้อง

นี่เป็นตัวอย่างที่เรียบง่าย แต่คุณควรจะเข้าใจแนวคิดทั่วไปได้


12
ขอบคุณสำหรับคำอธิบายที่ดี จะเกิดอะไรขึ้นเมื่อมีคนพยายามสร้าง URL แบบสั้นสำหรับ URL แบบยาวที่มีอยู่แล้ว พวกเขาทำการค้นหาข้อความแบบเต็มในฐานข้อมูลหรือไม่? ฉันไม่คิดว่ามันจะเสียเวลามากเกินไป วิธีการย่อยตามแฮชหรือข้อความดูเป็นประโยชน์มากขึ้น
Piyush Kansal

@PiyushKansal คุณสามารถใช้แฮชภายในเพื่อทำการO(1)ค้นหาเพื่อค้นหารายการที่ซ้ำกัน จากนั้นกำหนดเส้นทาง URL เล็ก ๆ ที่มีอยู่สำหรับสิ่งนั้นหรืออาจเลือกสร้างใหม่ เท่าที่ฉันสามารถบอกได้คือgoo.glใช้ URL เล็ก ๆ ซ้ำสำหรับ URL เดียวกัน ลองทำในตอนท้ายของหน้านี้: คุณได้รับสิ่งนี้ >> goo.gl/8gVb8X?
Kingz

พวกเขาจัดการกับพารามิเตอร์ url อย่างไร? ตัวอย่างเช่น www.digg.com?filter=123
Ronen

7

เป็นส่วนเสริมของคำตอบ @A Salcedo:

บริการย่อ URL บางอย่าง (Tinyarro.ws) ไปมากโดยใช้ Unicode (UTF-8) เพื่อเข้ารหัสอักขระใน url แบบย่อซึ่งจะช่วยให้มีจำนวนเว็บไซต์มากขึ้นก่อนที่จะต้องเพิ่มสัญลักษณ์เพิ่มเติม เนื่องจากส่วนใหญ่UTF-8 ได้รับการยอมรับสำหรับการใช้งาน ( (IRI) RFC 3987 การจัดการโดยเบราว์เซอร์ส่วนใหญ่ ) ที่กระแทกจาก62เว็บไซต์ต่อสัญลักษณ์ 1,112,064~

ในแง่มุมหนึ่งเราสามารถเข้ารหัสไซต์ 1.2366863e + 12 ที่มีสัญลักษณ์ 2 ตัว ( 1,112,064*1,112,064) - ในเดือนพฤศจิกายน 2552 bit.lyมีการเข้าถึงลิงก์ที่สั้นลงเป็น2.1พันล้านครั้ง (ในช่วงเวลานั้น bit.ly และ TinyURL เป็นบริการย่อ URL ที่ใช้กันอย่างแพร่หลายมากที่สุด ) ซึ่งน้อยกว่าที่คุณสามารถใส่ได้เพียงแค่ 2 สัญลักษณ์ถึง 600 เท่าดังนั้นตลอดระยะเวลาการมีอยู่ของบริการย่อ URL ทั้งหมดควรใช้เวลาอย่างน้อย 20 ปีจนกว่าจะเพิ่มสัญลักษณ์ที่สาม


5

ในคำง่ายๆเครื่องมือย่อ URL จะจับคู่ลำดับอักขระที่ยาวโดยพลการ (URL ดั้งเดิมที่ยาวเส็งเคร็ง) เป็นลำดับอักขระที่สั้นและเรียบเนียน นี่ไม่ใช่อะไรนอกจาก Hashing ซึ่งมักใช้ในการสร้างตารางการค้นหา HashMap, md5 Hash เพื่อวัตถุประสงค์ในการเข้ารหัสเป็นต้น

เพื่อให้เข้าใจกระบวนการย่อ URL ฉันได้สร้างโครงการสาธิตบน GitHub และโพสต์บล็อกด้วย โปรดดูสิ่งนี้และแจ้งให้เราทราบหากมีประโยชน์

บล็อกโพสต์: การย่อ URL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.