חלקים של טרנזקציית HTTP : הבקשה – חלק 5

 

מתחת לממשק מול המשתמש המיוצג ע"י הדפדפנים , נמצאת הרשת והפרוטוקולים אשר מסתעפים לתוך השרתים או ל"מנועים" אשר מעבדים את הבקשות ומחזירים את המדיה הנדרשת. פרוטוקול ה 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 /webdocs/index.html CRLF

 שים לב כי בקשת ה 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 אשר אתה רואה(.      

 

selena: telnet www.extropia.com 80
Trying 206.53.239.130...
Connected to www.extropia.com.
Escape character is '^]'.

GET /Scripts/Columns/irobot.html
<HTML>
<HEAD>
<TITLE>Hello there</TITLE>
</HEAD>
<BODY>
Hello there.  My, you are awfully good-looking
to be a web browser!
</BODY>
</HTML>

Connection closed by foreign host.
selena:

 

 היופי בדפדפנים הינו כמובן שהם מטפלים בעצמם בפרוטוקול HTTP כך שהמשתמש צריך רק לדאוג לספק את הURL של הדף אשר ברצונו לראות. דפדפן ה WEB מתרגם את בקשת הGET, שולח אותה לשרת הWEB , מקבל את מסמך הHTML בחזרה ומציג את מסמך ה HTML בהתאם להוראות ה HTML הכתובות במסמך.

 מלבד האפשרות של הדפדפנים לקבל מסמכים בעזרת טכניקת GET , ניתן להשתמש בטכניקת GET גם לצורך שליחת פרמטרי חיפוש אופציונליים ( במקור נמצא בשימוש בקבצי ISINDEX HTML).

 פרמטרי חיפוש קודדו בצורה מיוחדת כך ששרת ה WEB יכול היה לטפל בהם.

עבודת הקידוד התבצעה כך:

ה URL הופרד מפרמטרי החיפוש בעזרת סימן שאלה (?). במילים אחרות , ה URL בצורה כללית נראה כך:   

 

http://www.domain.com/dir/file?search parameters

  מכיוון שיתכן ונרצה להשתמש במספר פרמטרי חיפוש , יש להשתמש בתו המפריד המוגדר ע"י גישת GET והוא &. לכן ה URL המקודד הנזכר לעיל יראה כך: 

  

http://www.domain.com/dir/file?search1&search2&search3

   הדבר הבא בתור הינו ציון פרמטרי החיפוש עצמם אשר מופיעים כזוגות של שם\ערך המופרדים בעזרת הסימן שווה (=). כפי שניתן לראות בדוגמא הבאה המשתנה “lname" מקבל את הערך "Sol" והמשתנה “fname" מקבל את הערך “Selena": 

   

http://www.domain.com/dir/file?lname=Sol&fname=Selena
 

 יתרה מכך , כל הרווחים במחרוזת המקודדת מוחלפים בסימני פלוס (+) כפי שניתן לראות בדוגמא הבאה:

 

http://www.domain.com/dir/file?name=Selena+Sol&age=28
 

  ולבסוף , כל תו לא-אלפביתי מוחלף בערך ההקס-דצימלי השקול לו ובעל התחילית של סימן אחוז (%). לדוגמא תו של גרש יחיד (‘) מקודד בתור %27 , קו עצירה (אשר מורכב מ CR ו LF) מקודד כך : %0D%0A. לכן , בדוגמא הבאה אנו נסיק כי המשתנה "pageName" מקבל את הערך "Selena Sol's Page":  

 

http://www.domain.com/dir/file?pageName=Selena+Sol%27s+Page
 

 למרות שטכניקת 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 אשר תראה כך:

      

POST /cgi-bin/phone_book.cgi HTTP/1.0
Referer: http://www.somedomain.com/Direcory/file.html
User-Agent: Mozilla/1.22 (Windows: I: 32bit)
Accept */*
Content-type: application/x-www-form-urlencoded
Content-length: 29
name=Selena+Sol&phone=7700404
 

 שים לב כי כותר הבקשה "Content-length" שווה למספר התווים בגוף הבקשה. זה חשוב מכיוון שסקריפט CGI יכול בקלות לדלות את המשתנים הנמצאים בגוף בעזרת שימוש באורך (length) הנתון מראש.

 אם כן שאלת מיליון הדולר היא כיצד מקבל הדפדפן כעת את זוגות שם\ערך על מנת להכניסם לגוף ההודעה של ה HTTP.

התשובה לכך הינה טופסי HTML. האם אתה זוכר זאת מהפרק הקודם?  

לראשהדף

רשימת מקורות נוספים

התגובה : HTTP חלקים של טרנזקציית