HTTP POST

POST היא אחת ממתודות בקשה (request) משרת הנתמכת על ידי הפרוטוקול HTTP ונמצאת בשימוש רחב ב"World Wide Web". בקשה מסוג POST מתוכננת לבקש משרת אינטרנט שיקבל מידע עטוף בחלק "גוף ההודעה" (message's body). POST משמש תדיר להעלאת קובץ לשרת או למסירת (Submit) טופס אינטרנטי לאחר שמילאו בו פרטים, אך ניתן להשתמש בו כדי להעביר לשרת מחרוזות טקסט ארוכות לכל צורך שהוא.

בניגוד לכך, שיטת GET נועדה למשוך מידע מהשרת. כחלק משיטת GET, ניתן להעביר סדרה מצומצמת יחסית של פרמטרים עם ערכים בשורת ה URI (ב-Query String), שם ניתן לציין ערכים לפרמטרים שהלקוח מניח שהשרת יכיר ומצפה לערכים אלו, כגון טווח תאריכים, מספר מזהה של דף או אובייקט וכיוצא באלו. שיטת POST יכולה להכיל כמות מידע גדולה בהרבה (תאורטית ללא הגבלה) בתוך גוף ההודעה. בנוסף ישנו Header אשר מסווג את סוג המידע אשר מוכל בהודעה. בעבר נקראו סוגים אלו MIME types, אך הורחבו לכלול HTML, SMTP ועוד

שליחת (Posting) מידע

שליחת מידע ב"World Wide Web" וב-HTTP, מבוססת על מספר שיטות או "פעלים" (verbs), כולל POST ו-GET וכן PUT, DELETE ואחרים. דפדפני אינטרנט משתמשים בשני הפעלים POST ו GET בלבד אולם אפליקציות המשתמשות ב-REST עושות שימוש במגוון פעלים נוספים.

תפקידו של POST בתוך מגוון הפעלים, הוא לשלוח ייצוג של סט חדש של נתונים לשרת כדי שיוכל לשמור אותו כמשאב חדש הניתן לזיהוי על ידי ה-URI. לדוגמה, עבור ה-URI‏ http://example.com/customers בקשת POST יכולה לייצג לקוחות (customers) חדשים ופרטיהם.

מתכנני טכנולוגיות אתרי אינטרנט ראשוניים סטו מהרעיון המקורי בשתי דרכים עיקריות. ראשית, אין סיבה טכנית שה-URI יתאר טקסטואלית את המשאב אליו ישמר המידע הנשלח ב POST. למעשה אם לא יעשה מאמץ לשנות זאת, החלק האחרון של ה-URI יכיל מידע אודות הדף המסוים באפליקציה והטכנולוגיה שהוא משתמש, לדוגמה: http://example.com/insertRecord.php (ר' PHP). ושנית, לאור העובדה שדפדפני אינטרנט בדרך כלל מוגבלים לשתי השיטות GET ו POST, מתכננים נאלצו לעשות שימוש עוקף בטכנולוגיית POST כדי לעשות מגוון חדש של פעולות על מידע, כגון עריכת רשומות או מחיקתן.

דוגמאות

Submit

כאשר דפדפן אינטרנט שולח request מטופס אינטרנטי, סוג המדיה כברירת מחדל הוא: application/x-www-form-urlencoded. זהו פורמט לקידוד צמדים (key-value pairs) של מפתח וערך (עם אפשרות למפתחות כפולים). כל צמד מופרד על ידי הסימן & וכל מפתח מופרד על ידי הסימן = מהערך שלו. מפתחות וערכים עוברים החלפה של רווחים בסימן + ועוברים קידוד URL‏(URL encoding) עבור שאר הסימנים שאינם אלפא-בתים.

לדוגמה צמדי מפתח-ערך אלו:

Name: John Doe
Age: 40
Formula: a + b == 13%!

יקודדו כ:

Name=John+Doe&Age=40&Formula=a+%2B+b+%3D%3D+13%25%21

HTML, מגרסה 4.0 ואילך, יכול למסור מידע בפורמט multipart/form-data כפי שמוגדר ב-RFC 2388 (וראה RFC 1867 גרסה מוקדמת ניסיונית המוגדרת כחלק מההרחבות של HTML 2.0 ומוזכרת ב HTML 3.2).

המקרה המיוחד של POST אל אותו הדף שהטופס שייך אליו קיבל שם מיוחד ונקרא Postback.