Hypertext Transfer Protocol (HTTP) הוא פרוטוקול תקשורת, כלומר סט כללים לשידור דפי אינטרנט ואובייקטים כמו תמונות וקבצי מולטימדיה. הפרוטוקול פועל בשכבת היישום של רשתות ה-OSI וה-TCP/IP. שרתי HTTP מספקים את התוכן ודפדפנים הם הלקוחות הנפוצים. רוב השימוש כיום נעשה באמצעות HTTPS, שהוא HTTP עם הצפנה (שומרת על פרטיות הנתונים).
HTTP עובד בסדרה של בקשות (requests) ותשובות (responses). הלקוח פותח חיבור לשרת בעזרת TCP (פרוטוקול אמין שמוודא שהמידע הגיע) או, ב-HTTP/3, בעזרת QUIC שמבוסס על UDP (מהיר יותר). הלקוח שולח בקשה לכתובת של משאב, והשרת מחזיר תשובה עם המידע או קוד סטטוס. הפרוטוקול עצמו חסר "מצב" (stateless), לכן משתמשים בעוגיות (cookies) כדי לשמור מידע על המצב בין בקשות.
ב-1991 הופיעה גרסה פשוטה מאוד (0.9) שתמכה רק בבקשת GET. ב-1996 יצאה הגרסה 1.0 שהוסיפה שדות כותרת ושיטות נוספות. HTTP/1.1 פורסם ב-1999 והוסיף שיפורים למטמון, תמיכה ב-virtual hosts, ושימוש בחיבור יחיד למספר בקשות. ב-2015 יצא HTTP/2, שהאיץ העברה על ידי המרת המנגנון הפנימי. ב-16 ביוני 2022 פורסם HTTP/3, שמחליף את TCP ב־QUIC מבוסס UDP, ומשפר ביצועים במיוחד במכשירים עם latency גבוה.
בקשות HTTP כוללות כתובת של משאב ושדות כותרת עם פרטים על הבקשה. ישנן כמה שיטות בקשה עיקריות. שיטות "בטוחות" (safe) מיועדות רק להבאת מידע ואין להן תופעות לוואי. שיטות "אידמפוטנטיות" מחזירות את אותה תוצאה אם מבצעים אותן שוב.
השיטות הנפוצות הן: GET (לקבל משאב), HEAD (לקבל רק כותרות בלי גוף), POST (לשלוח נתונים לשרת, למשל מטפסים), PUT (לשמור אובייקט בשרת), DELETE (למחוק אובייקט), OPTIONS (לשאול אילו שיטות נתמכות), TRACE (להחזיר את הבקשה כפי שהיא התקבלה לשם בדיקה), CONNECT (שימוש בעורפי פרוקסי) ו-PATCH (לעדכון חלקי של אובייקט). כל שרת HTTP צריך לתמוך ב-GET ו-HEAD לפחות. שיטות אלה מסווגות לפי ההשפעה שלהן על השרת והלקוח.
כתובת בבקשה יכולה להיות מלאה (כוללת פרוטוקול ודומיין) או יחסית לשרת. ב-HTTP/1.1 הוצג שדה הכותרת host, שמציין את שם המתחם אליו מיועדת הבקשה. זה איפשר לאחסן כמה אתרים על אותו שרת.
התשובה מהשרת כוללת קוד מצב (מספר תלת-ספרתי) והסבר קצר. ספרת העשרות הראשונה מחלקת את הקוד לקטגוריות: 1xx מידע, 2xx הצלחה, 3xx הפניות, 4xx שגיאת לקוח, 5xx שגיאת שרת. אם לקוח לא מכיר קוד, הוא יכול להסתמך על הקטגוריה הכללית לפי הספרה הראשונה.
כמה קודי סטטוס נפוצים:
100 Continue, השרת מוכן לקבל את שאר ההודעה.
200 OK, הבקשה הצליחה והתוכן נשלח.
204 No Content, התשובה ללא גוף.
206 Partial Content, נשלח רק חלק מהמשאב.
301 Moved Permanently ו-302 Found, הפניות לכתובת חדשה.
304 Not Modified, העמוד אצל הלקוח עדכני, לא נשלח גוף.
400 Bad Request, הבקשה שגויה.
401 Unauthorized, נדרש אימות.
403 Forbidden, שאסור לשלוח את המשאב הזה.
404 Not Found, המשאב לא נמצא.
500 Internal Server Error, כשל פנימי בשרת.
503 Service Unavailable, השירות לא זמין כרגע.
504 Gateway Timeout, שרת ביניים לא קיבל תגובה בזמן.
שדות הכותרת (Headers) נשלחים עם כל הודעה וכוללים מידע על אורכה, סוג התוכן, מזהה התוכנה ועוד. רוב השדות אופציונליים, פרט ל-host בבקשות. רבים מהם מבוססים על פרוטוקול MIME מדואר אלקטרוני.
בגרסאות ראשונות נפתחו וסגרו חיבורים לכל בקשה, מה שיצר עומס. ב-1.1 שופרו המנגנונים כך שניתן להשתמש בחיבור יחיד למספר בקשות, כולל טיפול בבעיות עם פרוקסי.
מטמון (cache) חוסך תעבורה על ידי שמירת עותקים של דפים. יש שני מנגנונים עיקריים: אימות (השרת בודק אם העותק עדכני בעזרת תאריך או Entity tag) ותפוגה (תאריך עד מתי ניתן להשתמש בעותק בלי לפנות לשרת). שדה Cache-Control מאפשר קונפיגורציה של התנהגות המטמון.
בקשת GET פשוטה לשורש אתר נראית כמו "GET / HTTP/1.1" עם שדה host. שרתים יכולים להחזיר קוד 302 ולשלוח שורת Location להפניה. בדוגמה עם telnet ל-www.google.com הלקוח סיים בקשה וקיבל הפניה לכתובת החדשה, והחיבור נסגר או נשאר פתוח לפי הגרסה וההגדרות.
HTTP הוא סט כללים לשליחת דפי אינטרנט וקבצים בין מחשבים. שרת הוא המחשב ששומר דפים. דפדפן הוא התוכנה שביקשה את הדפים. HTTPS הוא HTTP עם הצפנה, כדי לשמור על פרטיות.
הפרוטוקול התחיל בפשטות ב-1991. גרסאות מאוחרות יותר שיפרו את המהירות ואת היכולות. ב-2022 נכנס HTTP/3, שמאיץ טעינה באמצעות פרוטוקול חדש בשם QUIC.
הלקוח שולח בקשה לשרת. הבקשה כוללת כתובת של הדף ושדות עם פרטים. השרת עונה בתשובה שכוללת תוכן או קוד שמסביר מה קרה.
שיטות חשובות:
- GET: להביא דף או קובץ.
- POST: לשלוח מידע לשרת, למשל טופס.
- PUT: לשמור קובץ בשרת.
- DELETE: למחוק קובץ.
- PATCH: לתקן חלק מהקובץ.
יש עוד שיטות טכניות.
ב-HTTP/1.1 כל בקשה מכילה שדה host. הוא אומר לאיזה אתר הפנייה מכוונת, גם כשיש כמה אתרים על אותו שרת.
תשובות כוללות קוד מצב. ספרה ראשונה עוזרת להבין את הסוג:
1xx מידע, 2xx הצלחה, 3xx הפניה, 4xx שגיאת לקוח, 5xx שגיאת שרת.
דוגמאות שחשובות:
- 200 OK: הכל בסדר.
- 301/302: העמוד עבר לכתובת אחרת.
- 304 Not Modified: העותק אצלך עדכני.
- 404 Not Found: הדף לא קיים.
- 500 Internal Server Error: בעיה בשרת.
שדות הכותרת נותנים פרטים על ההודעה. הם לא תמיד נראים למשתמש.
במקום לפתוח חיבור חדש לכל בקשה, אפשר להשאיר חיבור פתוח לכמה בקשות. זה חוסך זמן.
מטמון שומר עותקים של דפים כדי לטעון מהר יותר. יש מתי שהעותק תוקף עד תאריך מסוים, ויש מתי שצריך לשאול את השרת אם הדף השתנה.
דוגמה פשוטה: הלקוח שולח "GET /" לשרת. השרת יכול להחזיר הפניה לכתובת אחרת. בתקשורת עם telnet רואים את שורות הבקשה והתשובה בפירוט.
תגובות גולשים