מתחת
לממשק מול המשתמש המיוצג ע"י הדפדפנים ,
נמצאת הרשת והפרוטוקולים אשר מסתעפים
לתוך השרתים או ל"מנועים" אשר מעבדים
את הבקשות ומחזירים את המדיה הנדרשת.
פרוטוקול ה WEB
ידוע כ HTTP
– עבור HyperText
Transfer Protocol. ה
HTTP
הינו המכניזם התחתון שעל גביו מתבצעות
פעולות CGI
והוא קובע באופן ברור מה ניתן ומה לא ניתן
לשלוח או לקבל בעזרת CGI. |
מלבד
ציון האינפורמציה על הקובץ אשר מועבר , HTTP
גם מגדיר את השלבים של אינטראקציית בקשה\תגובה.
HTTP
מספק 2 דרכים עיקריות לבקשת מסמכים : GET
או POST.
ביישום
הראשוני של פרוטוקול HTTP
(הנקרא HTTP/0.9)
הוגדרה טכניקת GET
לצורך בקשת מסמך מסויים על ידי הדפדפן.
לדוגמא , בקשת ה HTTP הבאה תחזיר את המסמך "index.html" אשר ממוקם בספריית השורש (root directory) של שרת הWEB הנקראת "Webdocs".
|
שים
לב כי בקשת ה GET
מתחילה במילה GET
ואז המסמך אותו צריך להביא ובסוף סיום בשילוב
של CR(carriage return)
ושל LF(line feed).
אתה
יכול לנסות לבצע GET
ע"י חיבור לשרתי ה WEB
האהובים עליך ושליחת בקשת GET
בעצמך ( כאילו והינך דפדפן WEB).
להלן GET session אשר העתקתי מתוך חלון telnet. במקרה זה , השתמשתי ב telnet על מנת להתחבר לשרת ה WEB – www.extropia.com וביקשתי את הקובץ "irobot.html" אשר נמצא בספריית "Scripts/Columns". (יש לזכור את שני סימני ה carriage returns בסוף). השרת הגיב ע"י שליחת תוכן הקובץ אליי (קוד ה HTML אשר אתה רואה(.
|
היופי
בדפדפנים הינו כמובן שהם מטפלים בעצמם
בפרוטוקול HTTP
כך שהמשתמש צריך רק לדאוג לספק את הURL
של הדף אשר ברצונו לראות. דפדפן ה WEB
מתרגם את בקשת הGET,
שולח אותה לשרת הWEB
, מקבל את מסמך הHTML
בחזרה ומציג את מסמך ה HTML
בהתאם להוראות ה HTML
הכתובות במסמך.
מלבד
האפשרות של הדפדפנים לקבל מסמכים בעזרת
טכניקת GET
, ניתן להשתמש בטכניקת GET
גם לצורך שליחת פרמטרי חיפוש אופציונליים (
במקור נמצא בשימוש בקבצי ISINDEX HTML).
פרמטרי
חיפוש קודדו בצורה מיוחדת כך ששרת ה WEB
יכול היה לטפל בהם.
עבודת
הקידוד התבצעה כך:
ה URL הופרד מפרמטרי החיפוש בעזרת סימן שאלה (?). במילים אחרות , ה URL בצורה כללית נראה כך:
|
|
הדבר הבא בתור הינו ציון פרמטרי החיפוש עצמם אשר מופיעים כזוגות של שם\ערך המופרדים בעזרת הסימן שווה (=). כפי שניתן לראות בדוגמא הבאה המשתנה “lname" מקבל את הערך "Sol" והמשתנה “fname" מקבל את הערך “Selena":
|
יתרה מכך , כל הרווחים במחרוזת המקודדת מוחלפים בסימני פלוס (+) כפי שניתן לראות בדוגמא הבאה:
|
|
למרות
שטכניקת GET
היתה מאוד שימושית , ישנן עדיין מספר בעיות
רציניות.
הראשונה
, טכניקת ה GET
מאפשרת כמות נתונים מוגבלת ( 1024 תווים(
עבור ה URL
המקודד הנשלח.
אם
שרשרנו יותר מדי זוגות של שם\ערך ל URL
שלנו , חלקם יקטעו וילכו לאיבוד.
יתרה
מכך , מכיוון שהאינפורמציה נשלחת כחלק מ הURL
המשתמש יכול לראות את כל הפרמטרים הנשלחים עם
ה URL
וזה גורם ל URL
להראות מכוער ומפחיד. מצד שני זה גם אומר שאנו
חושפים את המשתמש לכל העבודה הפנימית של פלט ה
CGI.
כל
זה השתנה עם פיתוחו של HTTP/1.0.
פרוטוקול
HTTP/1.0
פותח משנת 1992 ועד שנת 1996 על מנת לספק את הצורך
לביצוע החלפות של אינפורמציה המורכבת יותר
מטקסט פשוט.
השינוי
העיקרי הראשון מ HTTP/0.9
היה השימוש ב כותרות דמויות MIME
בהודעות בקשה ותגובה.
השינוי
הבא ב HTTP
היה הגדרת טכניקות בקשה חדשות : HEAD
ו POST.
הבה
נתבונן בשינויים אלו מקרוב.
טכניקת
POST
של הקלט הינה שינוי חשוב אשר הובא על ידי HTTP/1.0.
טכניקת
ה POST
מאפשרת לדפדפנים לשלוח כמות בלתי מוגבלת לשרת
ה WEB
ע"י כך שמאפשרת לצרף זאת לבקשת HTTP
אחרי כותרות הבקשה כגוף ההודעה (message
body).
בד"כ
, גוף ההודעה יהיה מחרוזת ה URL
המקודדת המוכרת לנו (לאחר סימן השאלה).
לכן
– שרת ה WEB
אמור להכיר את בקשת ה POST
אשר תראה כך:
|
שים
לב כי כותר הבקשה "Content-length"
שווה למספר התווים בגוף הבקשה. זה חשוב מכיוון
שסקריפט CGI
יכול בקלות לדלות את המשתנים הנמצאים בגוף
בעזרת שימוש באורך (length) הנתון מראש.
אם
כן שאלת מיליון הדולר היא כיצד מקבל הדפדפן
כעת את זוגות שם\ערך על מנת להכניסם לגוף
ההודעה של ה HTTP.
התשובה
לכך הינה טופסי HTML.
האם אתה זוכר זאת מהפרק הקודם?