پروتکل 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 را نمایش دهند:
POST | GET | |
دیتا مجدد ارسال میشود | – | دکمه Back یا ریلود صفحه |
عدم امکان | ایجاد میشود | Bookmark |
Encoding های متفاوت | urlencoded | Encoding |
عدم دخیره سازی | ایجاد میشود | 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 کسب کرده باشید.