پروتکل HTTP یا Hypertext Transfer Protocol برای ایجاد قابلیت ارتباط میان کلاینت و سرور ایجاد شده است و به وسیله درخواست و پاسخ‌های تبادل شده عمل می‌نماید.

در این صفحه از باگدشت قرار است جزئیات پارامترها در HTTP Requests مورد بررسی قرار بگیرد ؛ با ما همراه باشید.
اطلاعات تبادل شده میان کلاینت و سرور می‌تواند بصورت‌های متفاوت بر اساس کدینگ طرفین باشد که در درخواست کلاینت به سرور اعلام می‌گردد. کلاینت از طریق مرورگر خود یک درخواست HTTP را به سرور ارسال نموده و سپس سرور پاسخ مربوطه را پردازش و ارایه می‌نماید. پاسخ سرور شامل اطلاعاتی در رابطه با وضعیت درخواست و محتوای درخواست شده است.

هدر HTTP:

سرآیند یا هدر یک درخواست HTTP به شکل زیر است:

GET / HTTP/1.1
Host: bugdasht.ir
Connection: close
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9

پارامتر نخست متد مورد درخواست HTTP را نمایش می‌دهد که پراستفاده‌ترین آن‌ها GET و POST است. سپس ریسورس مورد نظر برای دستیابی کلاینت به آن بر اساس آدرس دهی نسبی Host اعلام می‌گردد. HTTP/1.1 نوع پروتکل مورد نظر در پردازش درخواست را نمایش می‌دهد. در درخواست هر خط جدید نمایانگر هدرهای متفاوت HTTP می‌باشد و در نهایت هدر با یک خط خالی (Blank)  از بدنه درخواست یا Body مجزا می‌شود.

GET به منظور درخواست محتوا از سرور استفاده می‌شود و برای هر پارامتر درخواستی در URL یک نام و مقدار در نظر گرفته می‌شود. به عنوان مثال:

/test/demo_form.php?name1=value1&name2=value2

ویژگی‌های درخواست از نوع متد GET شامل مواردی همچون Cache شدن درخواست، ماندگاری در History مرورگر، محدودیت طول درخواست و همچنین عدم استفاده در درخواست اطلاعات مهم است.

متد POST برای ارسال دیتا و ایجاد یا به روزرسانی آن محتوا استفاده می‌شود. داده‌ای که می‌بایست تغییر نماید در Body درخواست ارسالی به سمت سرور ذخیره می‌شود.

POST /panel/change-password HTTP/1.1
Host: bugdasht.ir
Connection: close
Content-Length: 116
Cache-Control: max-age=0
Origin: https://bugdasht.ir
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

current-password=oldpass&password=newpassword&password_confirmation=newpassword

ویژگی‌هایی که برای درخواست POST می‌توان ذکر کرد شامل Cache نشدن درخواست‌ها، ذخیره نشدن در History و عدم محدودیت در طول دیتای ارسالی است. در جدول زیر مقایسه دو متد GET و POST انجام شده است. ابزارهای زیادی مانند BurpSuite می‌توانند جزئیات Request و Response را نمایش دهند:

POSTGET
دیتا مجدد ارسال می‌شوددکمه Back یا ریلود صفحه
عدم امکانایجاد می‌شودBookmark
Encoding های متفاوتurlencodedEncoding
عدم دخیره سازیایجاد می‌شودHistory
محدودیت نداردبه دلیل اضافه شدن به url دارای محدودیت استطول دیتا
امنیت بالاتر به دلیل ذخیره نشدن در history و لاگ وب سرورامنیت کم به دلیل ارسال در URLامنیت
دیتا در URL ارسال نمی‌شوددیتا برای همه قابل مشاهده استدسترس پذیری

دیتاهای هدر HTTP:

در یک درخواست HTTP هدرهای متفاوتی ارسال می‌شوند که تعدادی از آن‌ها در این بخش توضیح داده می‌شوند.

  • هدر Accept مشخص می‌کند که چه نوع منابعی در پاسخ دریافتی از سرور برای کلاینت قابل پذیرش است. این هدرمی‌تواند محدودیت نوع مدیا مورد نظر را اعلام کند مانند text/html.
  • Accept-Charset هدر دیگری است که به مجموعه کاراکترهای قابل فهم برای کلاینت اشاره می‌کند مانند UTF-8.
  • فیلد Accept-Encoding محدودیت برای نوع کدینگ محتوا ایجاد میکند نمونه های آن شامل gzip است.
  • Accept-Language به نوع زبان طبیعی محتوای درخواست اشاره دارد که زبان‌های قابل فهم توسط انسان هستند مانند en.
  • Authorization در درخواست کلاینت کاربر را به سرور احراز هویت می‌کند و شامل اطلاعاتی است که کاربر برای احراز هویت خود ارسال نموده است.
  • Cache-Control در سناریوهای CDN ها استفاده می‌شود و راهنمایی برای بایدهایی در مواجه با مکانیزم‌های Cache می‌باشد و مشخص می‌کند که آیا Cache می‌تواند تغییری در درخواست و پاسخ ایجاد کند یا خیر.
  • فیلد Connection به سرور اعلام می‌کند که این درخواست را در چه حالتی نگه دارد مثلا close درخواست را پس از اجرای آن می‌بندد و یا keep alive درخواست را باز نگه می‌دارد.
  • Cookie اطلاعات مرتبط با نشست را نگهداری می‌کند.
  • Content-Length به سایز Body اشاره دارد و بصورت بایت است و Content-Type نوع مدیای ارسال شده یا mime type در Body به سرور است.
  • Date زمان ایجاد درخواست به ساعت و تاریخ مانند Date: Tue, 15 Nov 1994 08:12:31 GMT است.
  • Host به هاست و پورت وب سایتی که منابع و محتوا از آن درخواست شده است اشاره دارد در صورتیکه پورت در این فیلد گفته نشود، پورت دیفالت در نظر گرفته می‌شود.
  • User-Agent فیلدی است که نوع agent کاربر درخواست دهنده را مشخص می‌کند که معمولا برای اهداف آماری و یا پاسخدهی خودکار برای کاربران با agent خاص مانند Mozilla/5.0  استفاده می‌شود.
  • X-Forwarded For معمولا توسط انواع پراکسی‌ها اضافه شده و می‌بایست آدرس IP واقعی کاربر درخواست دهنده را نگهداری کند.

امیدواریم با این آموزش اطلاعات خوبی در مورد پارامترها در HTTP Requests کسب کرده باشید.

منابع:

  1. IETF Tools