Hypertext Transfer Protocol | בקשות http

בקשות HTTP

בקשות HTTP מורכבות מהנתונים הבאים:

  • שיטת הבקשה.
  • כתובת של האובייקט המבוקש.
  • גרסת הפרוטוקול שלפיו מורכבת הבקשה.
  • שדות כותרת המתייחסים לבקשה, ללקוח, או לתוכן הנמצא בגוף הבקשה.
  • גוף הבקשה (אופציונלי).

שיטות בקשה

נכון לגרסה 1.1, קיימות 8 שיטות בקשה: GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE ו-CONNECT. ניתן לסווג אותן בשני אופנים: שיטות בטוחות לעומת שיטות לא בטוחות, ושיטות אידמפוטנטיות (idempotent) לעומת שיטות שאינן אידמפוטנטיות. סיווגים אלו נועדו להוות אינדקציה כללית עבור שרתים, דפדפנים ובוני אתרים באשר למידת ההשפעה של כל אחת מהשיטות על השרת ועל הלקוח.

שיטות בטוחות מוגדרות ככאלה שמיועדות רק לשם קבלת מידע מהשרת; הן לא אמורות לשמש, למשל, לשליחת מידע מהלקוח לשרת, לביצוע שינויים כלשהם במסדי נתונים שנמצאים על השרת וכו'. במילים אחרות, אין לשיטות אלה תופעות לוואי, למשל תוצאות, פרט לקבלת מידע. GET ו-HEAD נחשבות לשיטות בטוחות.

שיטות אידמפוטנטיות הן שיטות ששליחה חוזרת שלהן גורמת בדיוק לאותן תוצאות כמו שליחה אחת. שיטות שהן בטוחות הן, לפי ההגדרה, גם אידמפוטנטיות, משום שאין להן כלל תופעות לוואי. השיטות PUT ו-DELETE גם הן נכללות בסיווג זה. במקרה של DELETE, למשל, בקשה נוספת למחיקה של אותו פריט תגרום לכך שהפריט לא ימצא על השרת. אפילו אם הוא כבר לא היה עליו אחרי בקשה אחת, התוצאה של הבקשות החוזרות היא בדיוק אותה תוצאה של הבקשה הראשונה.

אלו הן שיטות הבקשה הנתמכות בגרסה 1.1:

GET (קבל)
מיועדת לקבלת אובייקט שנמצא על השרת, בכתובת שניתנת בתחילת ההודעה. בקשות GET הן הנפוצות ביותר ברשת האינטרנט.
HEAD (כותרת)
מבקשת מהשרת לשלוח את כל שדות הכותרת שהיו נשלחים לבקשת GET, אך בלי האובייקט עצמו. השיטה נועדה, בין השאר, לאפשר בדיקה של קישורים שבורים או זמני שינויים של אובייקטים מבלי לבקש את כל האובייקט.
POST (שלח)
בקשות המכילות גוף הודעה. בקשות POST משמשות בדרך כלל לשליחה של מחרוזות לשרת. למשל מחרוזות ארוכות, כגון נתונים בטפסי HTML, לשם עיבוד.
PUT (שים)
מבקשת מהשרת לשמור את גוף ההודעה המצורף לבקשה בתור אובייקט, שכתובתו היא הכתובת שניתנה בתחילת הבקשה.
DELETE (מחק)
מבקשת מהשרת למחוק את האובייקט שכתובתו מצוינת בתחילת הבקשה.
OPTIONS (אפשרויות)
מבקשת מהשרת מידע על דרכי התקשורת האפשריות ביחס לאובייקט מסוים או ביחס לשרת עצמו.
לדוגמה: קריאה ל-OPTIONS יכולה להגיע עם תשובה מהשרת שהוא מקבל GET, Post, PUT, Head ו-OPTIONS. אבל לא מקבל DELETE ו-TRACE.
TRACE (שחזר)
מבקש מהשרת לשלוח את הבקשה בדיוק כפי שקיבל אותה. הדבר שימושי לבדיקה של תחנות הביניים שנמצאות בין הלקוח לשרת ומעבדות את ההודעות העוברות דרכן.
CONNECT (התחבר)
הפרוטוקול אינו מגדיר את השימוש ב-CONNECT, אך שומר את השיטה הזו לשימוש עבור שרתי פרוקסי שמסוגלים להתנהג כמו תעלות SSL.

כתובות בבקשות HTTP

כתובת בבקשת HTTP יכולה להיות כתובת מלאה (כמו: http://www.w3.org/Protocols) או כתובת יחסית לשרת (בדוגמה זו, Protocols/). השימוש בכתובות יחסיות הוא הנפוץ ביותר, דבר שהקשה בעבר על אחסון של מספר אתרים על אותו שרת, משום שהשרת לא יכול היה לדעת לאיזה אתר מבין האתרים המאוחסנים אצלו מכוונת הבקשה. כדי לפתור את הבעיה מבלי לאבד את התמיכה לאחור בגרסאות קודמות, גרסה 1.1 מחייבת כל בקשה לכלול שדה כותרת בשם host, שערכו הוא שם המתחם של האתר אליו מיועדת הבקשה.