חומר זה הוא חלק מסדרת "מבוא לפיתוח ארגוני". מאמרים קודמים:
שלום! היום נבין את פרוטוקולי HTTP ו-HTTPS. אבל קודם כל, בואו נבהיר נקודה אחת: אנחנו מדברים על פרוטוקולי העברת נתונים דרך הרשת בשכבת האפליקציה של מודל ה-OSI. כזכור, דנו במודל OSI באחד המאמרים הקודמים. ואם אתה לא זוכר, הנה זה .
ראוי לציין מיד שפרוטוקול ה-HTTP מורכב מטקסט בלבד. ובכן, אנחנו הכי מתעניינים במבנה שבו נמצא הטקסט הזה. כל הודעה מורכבת משלושה חלקים:
מהו פרוטוקול העברת נתונים
זהו השם שניתן להסכם המקובל, שבזכותו מפתחים של שירותים שונים שולחים מידע בצורה אחת. לדוגמה, באמצעות Google Chrome, אתה יכול לקבל מידע גם מפייסבוק וגם מ-Twitter, מכיוון שהמפתחים מעבירים אותו בפרוטוקול HTTP הסטנדרטי, והדפדפן שלך יכול להתמודד עם זה. הכללים האחידים נוחים מאוד גם למפתחי צד השרת עצמם: ישנן ספריות רבות שיכולות להמיר עבורכם מידע ולשלוח אותו באמצעות הפרוטוקול הנדרש. HTTP נוצר במקור כפרוטוקול להעברת דפי HTML. זה היה המקרה במשך זמן רב, אך כעת מתכנתים מעבירים עליו לעתים קרובות גם מחרוזות וגם קבצי מדיה. בסך הכל, פרוטוקול זה הוא רב תכליתי וגמיש, והוא ממש קל לשימוש. עכשיו בואו נבין איך לעשות זאת.
מבנה HTTP
ראוי לציין מיד שפרוטוקול ה-HTTP מורכב מטקסט בלבד. ובכן, אנחנו הכי מתעניינים במבנה שבו נמצא הטקסט הזה. כל הודעה מורכבת משלושה חלקים:
- קו התחלה—מגדיר נתוני שירות.
- כותרות - תיאור פרמטרים של הודעה.
- גוף הודעה (גוף) - נתוני הודעה. יש להפריד מהכותרות בשורה ריקה.
איך נראית בקשת HTTP פשוטה
GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
קו הזינוק מכיל:
- GET - שיטת בקשה;
- / — נתיב בקשה (נתיב);
- HTTP/1.1 - גרסה של פרוטוקול העברת הנתונים.
- מארח - המארח שאליו מופנית הבקשה;
- User-Agent הוא הלקוח ששולח את הבקשה.
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com
{
"Id": 12345,
"User": "John"
}
הבקשה נשלחת אל javarush.com/user/create/json, גרסת הפרוטוקול היא HTTP/1.1. Accept מציין באיזה פורמט תגובה הלקוח מצפה לקבל, Content-Type מציין באיזה פורמט נשלח גוף ההודעה. Content-Length - מספר התווים בגוף. בקשת HTTP יכולה להכיל כותרות רבות ושונות. פרטים נוספים ניתן למצוא במפרט הפרוטוקול .
תגובות HTTP
לאחר קבלת הבקשה, השרת מעבד אותה ושולח תגובה ללקוח:HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98
<html>
<head>
<title>An Example Page</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>
שורת ההתחלה בתגובה מכילה את גרסת הפרוטוקול (HTTP/1.1), קוד מצב (200), תיאור מצב (אישור). כותרות מציינות את סוג ואורך התוכן. גוף התגובה מכיל את קוד ה-HTML שהדפדפן ישאב אל דף ה-HTML.
קודי סטטוס תגובה
הכל ברור עם גוף ההודעה והכותרות, אבל כדאי לומר כמה מילים על קודי סטטוס. קודי סטטוס תגובה הם תמיד שלוש ספרות, והספרה הראשונה של הקוד מציינת את הקטגוריה של התגובה:- 1xx - מידע. הבקשה התקבלה, השרת מוכן להמשך;
- 2xx - מוצלח. הבקשה התקבלה, הובנה ועובדה;
- 3xx - ניתוב מחדש. יש לבצע את השלבים הבאים לעיבוד הבקשה;
- 4xx - שגיאת לקוח. הבקשה מכילה שגיאות או אינה תואמת את הפרוטוקול;
- 5xx - שגיאת שרת. השרת לא הצליח לעבד את הבקשה, למרות שהיא הורכבה כהלכה;
- 200 בסדר - הבקשה התקבלה ועובדה בהצלחה;
- 201 נוצר - הבקשה התקבלה ועובדה בהצלחה, וכתוצאה מכך נוצר משאב חדש או מופע שלו;
- 301 הועבר לצמיתות - המשאב המבוקש הועבר לצמיתות, ובקשות עוקבות אליו חייבות להתרחש בכתובת החדשה;
- 307 הפניה זמנית - המשאב הועבר באופן זמני. לעת עתה, אתה יכול לגשת אליו באמצעות הפנייה אוטומטית;
- 403 אסור - הבקשה ברורה אך נדרשת אישור;
- 404 לא נמצא - השרת לא מצא את המשאב בכתובת זו;
- 501 לא מיושם - השרת אינו תומך בפונקציונליות להגיב לבקשה זו;
- גרסה 505 HTTP לא נתמכת - השרת אינו תומך בגרסה שצוינה של פרוטוקול ה-HTTP.
GO TO FULL VERSION