היום למדתי: ההבדל בין URL ל URI

22/04/2022

לא להאמין שהעברתי חיים שלמים בלי לדעת את זה, אבל אם גם אתם פתאום לא בטוחים אז הגעתם למקום הנכון. קודם כל משמעות ראשי התיבות דומה - URL הוא Uniform Resource Locator ו URI הוא Uniform Resource Identifier. ההבדל ביניהם הוא עדין אבל חשוב:

ה URI הוא מזהה ייחודי של "משאב" בטכנולוגיית ווב. אפשר להשתמש בהם כדי לזהות אתרים באינטרנט אבל גם אנשים, מקומות, מושגים, ולמעשה כל דבר. ה URI של משאב לא חייב להיות כתובת אינטרנט אמיתית, ויכול להיות כל מחרוזת שנראית כמו כתובת אינטרנט. לכן כל אלה הם URI-ים:

https://schema.org/Person
foo://example.com:8042/over/there?name=ferret#nose
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
urn:isbn:0-486-27557-4
https://stackoverflow.com/questions/4913343/what-is-the-difference-between-uri-url-and-urn
data:,Hello%20World

חלק מה URI-ים מתיחסים למסמך ספציפי ברשת ומסבירים איך להגיע אליו. למשל ה URI הזה:

https://stackoverflow.com/questions/4913343/what-is-the-difference-between-uri-url-and-urn

הוא קישור ל Stack Overflow. הוא סוג של "מצביע" לדף בפרוטוקול https. מזהים כאלה נקראים URL-ים, כי הם מספקים דרך לאתר (to locate) את המשאב שהם מזהים. הרבה פעמים, וזה קצת מבלבל, ה URI יהיה בעצם כתובת אינטרנט של דף שלא באמת קשור לדבר שהוא מזהה. לדוגמה ב HTML 4 מסמך היה מתחיל בשורה:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">

אבל לדפדפנים לא היה אכפת אם הייתם טועים בכתובת האינטרנט שמופיעה שם. הסיבה שיש כתובת אחרי ה DOCTYPE היא רק בשביל לזהות את הגירסה של ה HTML, ובעצם השורה מתפקדת בתור URI ולא URL - אף אחד לא משתמש בה כדי לקרוא את המסמך שנמצא בה. אותו סיפור קורס ב XML Namespaces וגם במזהים של schema.org.

בקיצור אם יש לנו כתובת שמזהה מסמך ואנחנו משתמשים בה כדי להגיע למסמך הזה נקרא לה URL. אם יש לנו מזהה ייחודי של "משהו" שאנחנו לא צריכים באמת להגיע אליו אנחנו קוראים לזה URI.

למידע נוסף שווה לקרוא את הפוסט הזה מהבלוג של auth0 שעוזר לחדד את ההבדל בין המושגים: https://auth0.com/blog/url-uri-urn-differences/