
GET - בקשת מידע, או POST - שליחת מידע), נתיב הדף בשרת, וגרסת ה-HTTP.football.html), אין לו Body, והשרת מחזיר קוד 200 עם הדף המבוקש.הטקסט המלא של הדקות הראשונות בהרצאה «פרוטוקול HTTP» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הראשון שאנחנו בעצם מתחילים איתו זה הבנה של פרוטוקול HTTP. אחד הדברים המרכזיים שאפשר לבנות עם.NET Core זה Services שנמצאים באינטרנט ונותנים לנו איזה שהוא שירות.
בשביל לדעת איך באמת לבנות Services אנחנו צריכים להכיר ממש ב-High Level את פרוטוקול התקשורת HTTP. בואו נבין קודם כל מה זה HTTP.
ראשי תיבות Hypertext Transfer Protocol זה בעצם... פרוטוקול התקשורת של רשת האינטרנט, שנבנה לצורך בקשה וקבלת דפי אינטרנט. התקשורת עצמה שבעזרתה אני מבקש את המידע ומקבל את המידע, או מעביר דאטה ומקבל דאטה, זה תקשורת TCP.
TCP זה Transmission Control Protocol, וזה בעצם הפרוטוקול הבסיסי יותר, שבעזרתו הוא שולח את הדאטה עצמו. אז מה זה HTTP?
HTTP זה סך הכל מסמכים שאותם אנחנו שולחים על ידי פרוטוקול TCP, בשביל לתאר איזה דף אנחנו רוצים ובשביל לקבל את הדף שאנחנו רוצים. זאת אומרת, קודם כל קיים פרוטוקול בסיסי בשביל להעביר נתונים בסיסיים כמו תווים ABC, שנקרא TCP, הוא בעצם מאפשר לנו לבקש דאטה ולקבל דאטה, ועליו אנחנו פשוט משתמשים.
ב-HTTP בשביל לתאר את הדאטה ולקבל את הדאטה. תכף נצטרון לעומק לדוגמאות ונבין יותר מה זה HTTP. אז סך הכל בעזרת ה-HTTP אנחנו אומרים לשרת מה אנחנו רוצים, והשרת מביא לנו את מה שאנחנו רוצים.
אז הדפדפן מייצר בקשה בשביל לבקש דף, והשרת פשוט מחזיר לנו את הדף בתוך המסמך. שני המסמכים האלה מרכיבים את פרוטוקול התקשורת HTTP. יש לנו...
סרבר, יש לנו פה איזה סכמה קטנה שמראה את זה, יש לנו דף דפן, הדף דפן מייצר ריקווסט, ריקווסט זה סך הכל מסתמך שאומר מה הדף שאני רוצה, והשרת מקבל את המסמך, אומר אה אוקיי אתה רוצה את הדף הזה והזה, בבקשה הנה מסמך שמכיל את הדף בתוכו ומחזיר לדף דפן.
שני המסמכים האלה, התצורה שלהם והמבנה שלהם זה בעצם פרוטוקול HTTP. אז בואו נקצלול ונראה קצת יותר לעומק. מה הפורמט של בקשה של HTTP. אז דבר ראשון, יש לנו משהו שנקרא method.
method זה הייעוד של הבקשה. get זה אומר שאני רוצה לקבל מידע, ו-post זה אומר שאני רוצה לשלוח דאטה לשרת. לאחר מכן אני מתאר איזה דף אני רוצה, כאן אני מתאר רק את הדף עצמו, אני לא מתאר את כל הכתובת לשרת, רק נתיב פנימי איפה הדף נמצא בשרת.
לאחר מכן יש לנו את הגרסה של ה-HTTP, יש מספר מצופצם של גרסאות, אבל פה הגרסה מתוארת, שימו לב שזה סך הכל מסמך טקסטואלי. לאחר מכן יש רשימה שנקראת HTTP Request Headers.
הדר זה בעצם הוראה מסוימת, יותר הוראה מערכתית למערכת עצמה, אולי לשרת, אולי לתאר, איזשהו משהו פנימי של המערכת, לפעמים מתייחסים לזה בתור מטה דטה, מטה דטה זה נתונים.
על משהו, הנתונים הנלווים לגבי משהו מסוים, כל הדר בנוי על ידי שם, נקודותיים ו-value, שם, נקודותיים ו-value, כל הדר הוא שורה אחת, הדר לדוגמה יכול להיות, מה השעה כרגע, הדר יכול להיות, מי אני, מה הכתובת של הדפדפן שביקש את הבקשה, כי אנחנו ברקווסט, בגלל שאין בעצם הוראה לגבי כמה הדרים חייבים או כמה
אפשר, אנחנו יכולים להגדיר מעט הדרים, אנחנו יכולים להגדיר הרבה הדרים, המערכת יכולה להגדיר מספר הדרים מסוים, אין הגבלה לגבי כמה הדרים, אז אנחנו חייבים לדעת מתי ההדרים מפסיקים, מתי בעצם זה הסוף של ההדרים, כי כל הדר זה שורה אחת, לכן יש לנו פה שורה ריקה, פה אין לנו שורות ריקות, הכל צמוד, הנה
שורה ריקה ואז מגיע הבאדי, הבאדי זה הדאטה הראשי שאני רוצה כרגע לשלוח מהדפדפן. לשרת אולי אני ממלא איזה תופס ושולח את הפרטים של התופס זה יהיה כאן מה כרגע השעה הנוכחית שאני שולח את התופס זה לא המידע הראשי לכן זה יכול להיות כמידע נלווה לדוגמה הדר מסוים שנמצא פה אז הנה
הפורמט של הבקשה שהדפדפן שולח לשרת השרת מקבלת הבקשה ואז הוא מחזיר תשובה אנחנו כמובן בHDP רוצים דפים ולשרת אמור לשלוח דף אבל לשרת לא שולח את כל הדף as is שולח HTTP response איך בנוי הרספונס?
פה הגרסה של ה-HDP שהשרת עובד איתה. לאחר מכן, כאן יש לנו סטטוס קוד, סטטוס קוד זה מספר בין שלוש ספרות שמתאר מה קרה. יש הצלחה, אין הצלחה, יש כישלון, למה יש כישלון?
איזשהו קוד שמתאר מה קרה. מיד לאחר מכן יש תיאור קצר בין מילה אחת או שתיים שמתאר את הקוד הזה. לדוגמה, אם יש הצלחה, אז אולי יהיה כתוב פה סך הכל את המילה, אוקיי?
לאחר מכן, הידרים. שקשורים לרספונס שוב פעם הוראות מערכתיות אולי השרת כותב כאן מי אני? איזה שרת אני? מה הסוג של השרת? אולי השרת גם הוא כותב מה כרגע השעה שאני מחזיר לך את ההודעה?
כל מיני הגדרות מערכתיות כאלה פקודות מערכת. לאחר מכן שוב שורה ריקה בשביל שמי שמקבל את המסמך הזה ידע סיימנו את כל הפקודות המערכתיות האלה, ההדרים שמתארים את כלל הריספונס או כל מיני פקודות מערכת, וכאן יש לנו את המידע הראשי או מרכזי שאנחנו מחזירים מהשרט, או יותר נכון שהשרט מחזיר לדפדפן.
לדוגמה, אם אנחנו ביקשנו דף, הקוד של הדף, ה-HTML עצמו של הדף, נמצא פה, לא בכל הריספונס, רק בחלק הזה. אז הנה הפורמט של התשובה שמוחזרת בחזרה.
בואו נראה כמה דוגמאות יותר ספציפיות. דוגמה ראשונה, דפדפן רוצה לקבל איזה שהוא דף, אז כמובן סטוגה בקשה תהיה get, והוא גולש פנימית לאיזה שהוא אתר, אני לא רואה פה לאיזה אתר, כי זה לא הכתובת המלאה, זה רק פנימה בתוך האתר, יש איזה שהיא ספרייה שנקראת news, בתוכה sports, בתוכה דף html שנקרא football.html, איזה
שהיא גרסה של ה-http שאנחנו עובדים איתה כרגע, הנה רשימת ה'לדוגמה, פה אנחנו רואים מי הכתובת האמיתית של השרת, זאת אומרת שהכתובת הסופית זה זה ביחד עם זה, זה נקרא header host, מי אני בתור לקוח, בתור request, בתור דפדפן, זה הכתובת ה-IP של הדפדפן עצמו, מה סוג הדפדפן?
פה אנחנו רואים שזה אופרה אולי, אז אנחנו רואים שיש כל מיני הוראות מערכתיות כאלה, data מערכתי, זה ההדרים, יש פה עוד הדרים, ההדרים ממשיכים עד לכאן, ואז יש לנו שורה הריקה, ואז המידע הראשי.
אבל אם אני רוצה לקבל איזשהו דף אינטרנט, פוטבול HTML, אין לי שום מידע ראשי שאני צריך להגיד לשרת, הרי אמרתי לו כבר, תביא לי את הדף הזה.
זהו, הנה פה הכתובת של האתר. לכן הרבה פעמים קורה שבבקשות Get אין לנו Buddy. עכשיו השרת צריך להחזיר תשובה. אשר את אומר, אוקיי, אני עובד איתכם, אני הגרסה הזאת, שייתי פי 1.1, מתי זה הצלחה?
אוקיי, הכל בסדר, אני קיבלתי את הבקשה שלך, אני הבנתי מה אתה רוצה, יש לי את הדף הזה, הכל בסדר. הנה כל מיני הדרים שאני אומר לך, מי אני? אני סרבר מסוג הפאצ'י.
הנה התאריך הנוכחי שאני מחזיר לך את התשובה, הנה הפורמט, אני מחזיר לך HTML ועוד כל מיני הערכים מערכתיים כאלה. הנה השורה הריקה, והנה הדף שאתה רוצה.
אתה רצית את הדף פוטבול, הנה הקרוב. הקוד שלו, קוד HTML, קח אותו, הדפדפן שולף מפה את הדף ומציג. אוקיי, בואו נראה סוג אחר של בקשה. הדפדפן מייצר בקשת פוסט, פוסט זה אומר, הדפדפן רוצה לשלוח