05-05-2009, 16:07
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
ה-Web, יחסי שרת-לקוח, ועיבוד קוד צד שרת
עולם ה-Web מורכב מתקשורת בין מחשבים:
בצד האחד יש את תוכנת השרת (Server) שמפענחת בקשות של לקוחות (Clients) ומחזירה להם מידע טקסטואלי, כלומר שפת תסריט.
בצד השני יש את הלקוח, שהוא תוכנת דפדפן ברוב המקרים, שמקבל את המידע הטקסטואלי (כלומר מקבל Reply מהשרת) ופועל בהתאם.
בכל גיחה שכזו, מהשרת ללקוח או מהלקוח לשרת, נשלחים גם בראש ההודעה כותרים (Headers) שמספקים מידע (Metadata) על תוכן ההודעה.
הכותרים מסווגים את תוכן ההודעה, כמו ה-Format (לדוגמא, text/html, text/css וכו'), קידוד המידע הטקסטואלי (utf-8 וכו') ואחרים.
הנה דוגמא של כותרי הודעת Request שנשלחה אל שרת Web (לכתובת http://www.fresh.co.il), וכותרי הודעת Reply שהתקבלה מהשרת אל ה-Client:
(חלק מהמידע הוסתר מטעמי פרטיות)
Request
לפני כל הכותרים מופיעה שורה הכוללת את:- מתודת השליחה של הבקשה (GET,POST,HEAD,PUT וכו').
- נתיב המסמך המבוקש. עשוי לכלול את שאילתת ה-URL (נקרא query ; ראה URL ).
- פרוטוקול ה-HTTP שעל-פיו כתובה הבקשה.
חלק מהכותרים שנשלחו:- Host - שם המחשב שבו השרת שאליו נשלחת הבקשה.
- User Agent - השם של הדפדפן והגירסא שלו.
- Accept - פירוט של פורמטי (מלשון Format) תוכן ההודעה שהדפדפן יכול לעבד בהתאם לעדיפות של כל אחד מהם. האות q מסמלת עדיפות של הפורמט.
ניתן לראות בתמונה הנ"ל, שהפורמטים text/html, application/xhtml+xml, application/xml נמצאים בעדיפות 0.9. כל שאר הפורמטים (מבוטא ב- "*/*") נמצאים בעדיפות נמוכה יותר, 0.8. - Cookie - העוגיות שהשרת ביקש מהדפדפן לשמור. הדפדפן שולח לשרת את העוגיות ששמורות במחשב ה-Client.
Reply
לפני כל הכותרים מופיעה שורה הכוללת את:- גירסת פרוטוקול ה-HTTP שפורמט הרישה כתובה לפיו.
- ה-HTTP Status Code שמסמל את תוצאת הודעת ה-Request.
חלק מהכותרים שנשלחו:- Server - השם של תוכנת השרת וגירסתו.
- Content-Type - הפורמט של תוכן ההודעה.
- Set-Cookie - השרת מבקש מהדפדפן לשמור עוגיה. העוגיה, הערך שלה ופרטים נוספים נמצאים בכותר זה.
בהודעת ה-Reply, אחרי הכותרים, מגיע התוכן שזה בדר"כ מסמך ה-xHTML שאנחנו מבקשים מהדפדפן להציג.
לכן מכאן מסיקים, שאחרי שהמערכת שבנינו שלחה לדפדפן תוכן להצגה - לא יהיה ניתן לשלוח יותר כותרים, כיוון שהם נמצאים ברישה (החלק הראשון) של ההודעה.
עובדה זו נכונה גם לכותרי Set-Cookie, שהרבה כותבי תוכנת Web לא מבינים מדוע מופיעה להם שגיאה כאשר הם מנסים לקבוע עוגיה אצל ה-Client.
כל הכותרים הנ"ל נקראים HTTP Headers, כיוון שהם מותאמים לפרוטוקול HTTP.
כותרים אחרים אפשר להכיר מחיפוש בגוגל.
אחד הדברים שחשוב להבנה זה שאפשר לשלוח כל כותר שה-Client או ה-Server יחשוק לשלוח.
אך מי שמקבל את ההודעה לא בהכרח יעבד אותם ; כלומר ייתכן ומקבל ההודעה יתעלם מכותרים מסוימים.
ראוי גם להוסיף שאין הבדל ניכר בין בקשות HTTP הנשלחות במתודת GET או POST או HEAD וכו'. ראה מבנה מתודת POST בבקשת HTTP
עד עכשיו הבנו את מבנה ההודעות שהשרת וה-Client מתקשרים איתן.
אבל איך מעובד הקוד של אפליקציית צד השרת שכתבנו?
פשוט מאוד:
תוכנת השרת (כמו Apache וכו') טוענת מודול של קוד צד שרת מסויים, כמו PHP, ASP, DOT NET וכד'.
כל פעם שהשרת מתבקש מה-Client להוציא את הפלט של קובץ הנתמך ע"י תוכנת צד השרת, השרת "יאמר" לתוכנת צד השרת לעבד את המידע שבקובץ המדובר.
אתן דוגמא מ-PHP שנכונה עבור כל שפת צד שרת אחרת:
נניח שה-Client מבקש את הקובץ "index.php".
תוכנת השרת מזהה שהקובץ הזה צריך להיות מעובד ע"י PHP ולכן מבקשת ממנו לעבד המידע שבקובץ.
כאשר PHP קורא את הקובץ ונתקל בצירוף התוים שמסמל את תחילת קוד ה-PHP (שזה בדרך-כלל "<?php"), הוא יתחיל מאותו הרגע להתייחס לכל מה שכתוב כקוד PHP, עד לצירוף התוים שמסמל את סוף קוד ה-PHP (שזה "?>").
בנוגע לכל השאר, הוא מתייחס אל זה כפלט ושולח את המידע לשרת כדי שיפלוט אותו החוצה. קוד המזוהה כקוד PHP אינו נפלט.
אם תרצו לראות איזה כותרים אתם שולחים לאתרים ואיזה כותרים הם שולחים בחזרה אליכם, יש תוספי דפדפן שמספקים את האפשרות הזו.
אני משתמש בדפדפן FF3, והתוספים שיכולים לבצע אנליזה ל-HTTP Headers הם:- Live HTTP Headers (איתו השתמשתי להצגת הדוגמא הנ"ל)
- Tamper Data - מאפשר גם לשנות את ערך הכותרים שנשלחים.
- HttpFox - גם כן תוסף מעולה
- Firebug - בכלי ה- Network monitor
- Web Developer
|