עודכן לפני חודש
בכל פעם שאתה לוחץ על קישור, אתה מוציא הוראות לשלוש מערכות שונות בו-זמנית.
URL הוא בובת מטריושקה של כתובות. הסכמה אומרת לדפדפן שלך באיזו שפה לדבר. המארח מצביע על מכונה במרחב השמות הגלובלי של DNS. הנתיב מבקש משהו ממרחב השמות הפנימי שאותה מכונה המציאה לעצמה. שלוש מערכות כתובת, מחוברות יחד עם פיסוק.
בואו נפענח מה כל חלק באמת עושה.
URL מלא
הנה URL עם כל רכיב אפשרי:
כל חלק עונה על שאלה:
| רכיב | ערך | השאלה שהוא עונה עליה |
|---|---|---|
| סכמה | https | כיצד אני מתחבר? |
| אישורים | user:pass | מי אני? |
| מארח | www.example.com | היכן נמצא השרת? |
| פורט | 8080 | על איזו דלת אני דופק? |
| נתיב | /path/to/resource | מה אני רוצה? |
| שאילתה | key=value&foo=bar | עם אילו פרמטרים? |
| קטע | section | איזה חלק להציג? |
סכמה: כיצד אני מתחבר?
הסכמה מופיעה ראשונה, ואחריה ://. היא קובעת את הפרוטוקול שהדפדפן שלך משתמש בו:
- https — תעבורת אינטרנט מוצפנת (TLS)
- http — תעבורת אינטרנט לא מוצפנת
- ftp — העברות קבצים
- mailto — פותח לקוח דואר אלקטרוני
- file — קבצים מקומיים במחשב שלך
- ws/wss — חיבורי WebSocket
הסכמה גם מרמזת על פורט ברירת מחדל. כשאתה מבקר ב-https://example.com, הדפדפן שלך מתחבר לפורט 443 מבלי שציינת זאת.
מארח: היכן נמצא השרת?
המארח מזהה את המכונה שיש ליצור איתה קשר. הוא יכול להיות:
- שם דומיין:
www.example.com - כתובת IPv4:
192.168.1.1 - כתובת IPv6:
[2001:db8::1](סוגריים מרובעים נדרשים)
שמות דומיין אינם תלויי רישיות — EXAMPLE.COM ו-example.com מגיעים לאותו שרת. מערכת ה-DNS מתרגמת שמות אלה לכתובות IP שהדפדפן שלך יכול להתחבר אליהן.
פורט: על איזו דלת?
שרתים מאזינים על פורטים ממוספרים. אם לא מציינים אחד, חלות ברירות מחדל:
- HTTP → פורט 80
- HTTPS → פורט 443
- FTP → פורט 21
כששרת פועל על פורט לא-סטנדרטי, מציינים אותו אחרי נקודותיים: example.com:8080. מספרי פורטים נעים בין 0 ל-65,535.
נתיב: מה אני רוצה?
הנתיב מזהה את המשאב הספציפי בשרת:
כאן הכתובת מתעניינת. המארח הצביע אותך למכונה. עכשיו אתה בתוך מרחב השמות של אותה מכונה — וכל שרת ממציא את שלו. אחד ממפה נתיבים לקבצים על הדיסק. אחר מנתב אותם לשאילתות מסד נתונים. שלישי מייצר תגובות מקוד טהור. תחביר הנתיב הוא אוניברסלי; המשמעות שלו היא לגמרי מקומית.
שלא כמו שמות דומיין, נתיבים תלויי רישיות ברוב השרתים. /About ו-/about הם משאבים שונים. נתיב ריק מחדל ל-/ (השורש).
שאילתה: עם אילו פרמטרים?
מחרוזת השאילתה מתחילה ב-? ומכילה זוגות מפתח-ערך המופרדים ב-&:
שרתים משתמשים בפרמטרי שאילתה עבור:
- מונחי חיפוש:
?q=url+anatomy - סינון:
?status=published&year=2024 - עימוד:
?page=2&limit=20 - מעקב:
?utm_source=newsletter
סדר הפרמטרים בדרך כלל לא משנה.
קטע: פתק לעצמך
הקטע מתחיל ב-# ומצביע על חלק בתוך הדף:
הנה משהו מוזר באמת: הקטע לעולם לא עוזב את הדפדפן שלך. כשאתה מבקש URL זה, השרת מקבל https://example.com/docs ואין לו מושג שאתה מסתכל על #installation. הקטע הוא פתק שאתה מעביר לעצמך.
זה הופך קטעים למושלמים עבור:
- קישור לחלקי עמוד (גלילה לכותרות)
- ניתוב בתוך אפליקציות עמוד-יחיד (החלפת תצוגות ללא בקשות שרת)
- אחסון מצב בצד הלקוח שלא אמור להגיע לשרת
הקטע לא ממש חלק מהכתובת. הוא הוראה על מה לעשות אחרי שמגיעים.
קידוד URL
URL-ים יכולים להכיל רק תווים מסוימים ב-ASCII. כל דבר אחר מקודד באחוזים — ערך הבית של התו בהקסדצימלי, עם קידומת %.
קידודים נפוצים:
| תו | מקודד |
|---|---|
| רווח | %20 או + |
| & | %26 |
| = | %3D |
| # | %23 |
| / | %2F |
אז "URL encoding & special characters" הופך ל:
תווים שמורים כמו : / ? # & = בעלי משמעות מיוחדת ב-URL-ים. השתמש בהם כפשוטם רק בתפקידיהם המיועדים. כשאתה צריך אותם כנתונים, קודד אותם.
תווים לא-שמורים לעולם לא זקוקים לקידוד: A-Z a-z 0-9 - _ . ~
URL-ים מוחלטים לעומת יחסיים
URL-ים מוחלטים כוללים את כל מה שנדרש כדי למצוא משאב:
URL-ים יחסיים מפורשים ביחס לדף הנוכחי:
| URL יחסי | מתוך https://example.com/blog/post | פותר ל |
|---|---|---|
/about | יחסי לשורש | https://example.com/about |
./related | תיקייה נוכחית | https://example.com/blog/related |
../archive | רמה אחת למעלה | https://example.com/archive |
?sort=date | אותו נתיב, שאילתה חדשה | https://example.com/blog/post?sort=date |
#comments | אותו עמוד, קטע חדש | https://example.com/blog/post#comments |
URL-ים יחסיים הופכים אתרים לניידים — ניתן לעבור בין דומיינים מבלי לשכתב כל קישור.
אישורים ב-URL-ים
מפרט ה-URL תומך בהטמעת אישורים:
אל תעשה זאת. אישורים אלה מופיעים בהיסטוריית הדפדפן, ביומני שרת ובכותרות referrer. דפדפנים מודרניים מזהירים מפני כך. השתמש במקום זאת באימות מתאים.
השלכות אבטחה
כל דבר פרט לקטע עובר לשרת ועלול להיות מתועד:
- היסטוריית הדפדפן לוכדת URL-ים מלאים
- יומני שרת מתעדים נתיבים ומחרוזות שאילתה
- כותרות referrer יכולות לדלוף URL-ים לצדדים שלישיים
לעולם אל תשים נתונים רגישים (אסימונים, סיסמאות, מידע אישי) בפרמטרי שאילתה. השתמש בגוף POST או בכותרות אימות מתאימות במקום זאת.
שאלות נפוצות על URL-ים
מדוע ל-URL-ים מסוימים יש www ולאחרים לא?
www הוא רק מוסכמת תת-דומיין מהאינטרנט הראשוני — היא אינה נדרשת. example.com ו-www.example.com יכולים להצביע על אותו שרת או על שרתים שונים. רוב האתרים מגדירים את שניהם לעבוד, ומנתבים אחד לשני לעקביות.
מה האורך המרבי של URL?
מפרט ה-URL לא קובע מגבלה, אבל דפדפנים ושרתים כן. דפדפנים מודרניים כמו Chrome ו-Firefox מטפלים ב-URL-ים הרבה מעל 32,000 תווים1. המגבלה המעשית היא בדרך כלל השרת שלך — ברירת המחדל של Apache היא סביב 4,000 תווים. אם אתה נתקל במגבלות, כנראה שאתה שם יותר מדי נתונים ב-URL — שקול להשתמש בבקשות POST במקום.
מדוע URL-ים נשברים כשאני מעתיק אותם מאימיילים או מסמכים?
URL-ים ארוכים לעיתים קרובות מפוצלים על פני שורות, ושוברים אותם. ייתכן שיוכנסו רווחים, או שהקידוד יאבד. מקצרי URL קיימים בחלקם כדי לפתור בעיה זו. כשאתה משתף URL-ים עם תווים מיוחדים, שקול להשתמש במקצר או לקודד את ה-URL כראוי.
האם URL-ים תלויי רישיות?
באופן חלקי. הסכמה והמארח אינם תלויי רישיות (HTTPS://EXAMPLE.COM עובד)2. הנתיב, השאילתה והקטע בדרך כלל תלויי רישיות בשרתי Unix. שרתי Windows עשויים שלא להיות תלויי רישיות. אם יש ספק, שמור על הרישיות המקורית.
מה ההבדל בין URL לבין URI?
URI (Uniform Resource Identifier) הוא הקטגוריה הרחבה יותר. URL (Uniform Resource Locator) הוא URI שאומר לך כיצד לגשת למשאב — הוא כולל את הסכמה והמארח. URN (Uniform Resource Name) הוא URI שנותן שם למשאב מבלי לומר לך היכן הוא נמצא. בפועל, רוב האנשים משתמשים ב-"URL" עבור כתובות אינטרנט, וזה בסדר גמור.
מקורות
האם דף זה היה מועיל?