ممکن است در مورد درخواست های GET و POST شنیده باشید، اما آنها تازه شروع کار هستند.
هر درخواست HTTP از روشی برای توصیف هدف اصلی خود استفاده می کند. هر روش برای کارهایی از واکشی یک صفحه وب تا حذف یک منبع، کاربردهای خاصی دارد. GET و POST دو آشناترین هستند، اما هفت مورد دیگر وجود دارد.
در مورد این مفهوم و اینکه هر یک از 9 روش ممکن HTTP برای چیست، بیاموزید.
روش HTTP چیست؟
هر درخواست HTTP که میکنید شامل یک عمل و یک هدف برای آن عمل است، دقیقاً مانند یک فعل و یک اسم که به عنوان یک شی عمل میکند.
URL یک منبع منحصر به فرد را شناسایی می کند که به عنوان هدف درخواست عمل می کند. در همین حال، فعل – چه عملی در آن URL انجام شود – با یک روش نشان داده می شود.
خط اول درخواست HTTP مهم ترین اطلاعات از جمله نسخه HTTP، URL منبع و روش درخواست را ارائه می دهد:
GET /software/htp/cics/index.html HTTP/1.1
9 روش HTTP چیست؟
چهار روش اول معادل چهار عمل از مدل CRUD هستند: ایجاد، خواندن، بهروزرسانی و حذف. روش های HTTP مربوطه عبارتند از POST، GET، PUT و DELETE.
گرفتن
رایجترین و پیشفرضترین درخواستی که هنگام مرور وب و کلیک کردن روی پیوندها یا درخواست داده از طریق یک API ارسال میکنید. سرور باید منبع را در بدنه پاسخ خود برگرداند.
پست
از POST برای ایجاد منابع جدید استفاده کنید، به ویژه زمانی که آن منابع دارای یک منبع والد قابل شناسایی هستند. به عنوان مثال، اگر یک منبع /clients دارید، باید یک کلاینت جدید با ارسال داده های مورد نیاز به /clients ایجاد کنید.
قرار دادن
یک منبع موجود را به روز کنید یا جایگزین کنید. این شبیه به POST است، اما مشتری مسئول انتخاب یک شناسه منحصر به فرد برای منبع است. برای ایجاد یک منبع با استفاده از PUT، URL منبع باید شامل یک شناسه، به عنوان مثال، /clients/007 باشد.
حذف
از این روش برای حذف منبعی که در URL مشخص کرده اید استفاده کنید. مانند همه روش های HTTP، پشتیبانی به سرور انجام می شود. ممکن است به هر کسی اجازه دهد یک منبع را حذف کند، اگرچه این کار به وضوح خطرناک است. سروری که از DELETE پشتیبانی می کند معمولاً به احراز هویت و مجوز نیاز دارد.
دو روش دیگر تغییرات جزئی را در مورد بالا ارائه می دهند: PATCH و HEAD. ممکن است هنگام استفاده از API های خاص یا اگر در حال ساختن خود هستید، آنها را مفید بدانید.
پچ
روش PATCH یک منبع موجود را با داده های جزئی به روز می کند. به عبارت دیگر، شما نیازی به ارائه نمایش کامل منبع جدید ندارید، فقط فیلدهایی را که باید به روز کنید.
سر
درخواست HEAD برای زمانی است که شما اطلاعاتی در مورد یک منبع می خواهید، اما نه خود منبع. پاسخ شامل بدنه نخواهد بود، اما شامل مجموعهای از هدرهای مفید HTTP است. شما می توانید اندازه کل یک فایل را قبل از دانلود، از طریق هدر پاسخ Content-Length، دریابید.
روشهای باقیمانده – OPTIONS، CONNECT و TRACE – مبهمتر هستند. آنها با متادیتا، شبکه سازی و عیب یابی سروکار دارند. ممکن است آنها را در انواع خاصی از برنامه نویسی مفید بیابید، اما احتمالاً هر روز از آنها استفاده نخواهید کرد.
گزینه ها
یک سرور باید به این روش پاسخ دهد و به شما بگوید که منبع واقعاً از کدام روش های HTTP پشتیبانی می کند. این می تواند برای کشف مفید باشد.
اتصال
انواع خاصی از نرم افزارهای شبکه ممکن است از این روش برای ایجاد یک تونل بین دو کامپیوتر استفاده کنند. این اغلب برای راه اندازی یک اتصال HTTPS از طریق یک پروکسی استفاده می شود.
پی گیری
این روش برای عیب یابی مفید است. با دریافت آن، سرور باید درخواستی را که دریافت کرده در بدنه پاسخ ارسال کند. این روش مکانیزمی را برای بررسی اینکه آیا ماشینهای میانی جزئیات درخواست را تغییر دادهاند ارائه میکند.
GET و HEAD تنها دو روشی هستند که هر وب سرور عمومی از آنها پشتیبانی می کند. ممکن است یک سرور خاص از روش های دیگر پشتیبانی کند یا نه، بنابراین ابتدا باید بررسی کنید.
چه زمانی می توانید از این روش ها استفاده کنید؟
در بیشتر مواقع، روشهای HTTP برای شما شفاف هستند. با این حال، اگر فرمی را به یک صفحه وب اضافه کنید یا از یک API استفاده کنید، باید آنها را در نظر بگیرید.
روش های HTTP در HTML
ویژگی روش عنصر فرم به شما این امکان را می دهد که روش HTTP را برای استفاده در هنگام ارسال فرم تنظیم کنید. HTML فقط از پست پشتیبانی می کند و مقادیر این ویژگی را دریافت می کند – به علاوه یک جایگزین گفتگوی مبهم.
<form method="post">
...
</form>
میتوانید از ویژگیهایی مانند ابزارهای برنامهنویس Chrome برای مشاهده ترافیک شبکه و تأیید روشی که مرورگر شما برای یک درخواست خاص ارسال میکند استفاده کنید. توجه داشته باشید که اکثر فرمهای وب یک POST ارسال میکنند زیرا معمولاً دادهها را در سرور بهروزرسانی میکنند. با این حال، بسیاری از فرمهای جستجو از GET استفاده میکنند زیرا به سادگی دادهها را بدون تغییر واکشی میکنند.
از آنجایی که دادههای POST بخشی از URL نیستند، خصوصیتر از ارسال آن از طریق GET هستند. دادهها هنوز در بدنه درخواست وجود دارند که در تئوری، مهاجم ممکن است آن را رهگیری کند. اما ارسال داده از طریق HTTPS باید این مشکل را کاهش دهد.
شما هرگز نباید ورود کاربر را با درخواست های GET پیاده سازی کنید. اگرچه ممکن است ورود به سیستم بیشتر شبیه یک عملیات خواندن به نظر برسد تا ایجاد یا بهروزرسانی، همچنان باید از POST برای ایمن کردن دادهها استفاده کنید.
از آنجایی که فرمهای HTML فقط از GET و POST پشتیبانی میکنند، نمیتوانید مستقیماً فرمی ایجاد کنید که مثلاً منبعی را در سرور حذف کند. یک راه حل معمول که به اصول REST در سرور احترام می گذارد، استفاده از متغیر مکان نگهدار و وانمود کردن روش اصلی HTTP است. مثلا:
<form method="post">
<input type="hidden" name="_method" value="DELETE" />
...
</form>
کد سمت سرور شما میتواند وجود این متغیر «روش پروکسی» را بررسی کند و با آن بهگونهای رفتار کند که گویی روش واقعی مورد استفاده است. به عنوان مثال، در PHP:
$method = $_SERVER["REQUEST_METHOD"];
if (array_key_exists("_method", $_REQUEST)) {
$method = $_REQUEST["_method"];
}
ارسال درخواست های HTTP به صورت برنامه ای
Web Fetch API یک تابع جاوا اسکریپت fetch() را ارائه می دهد که می توانید از آن برای ارسال درخواست HTTP استفاده کنید. از طیف کاملی از روش ها پشتیبانی می کند، نه فقط GET و POST که HTML پشتیبانی می کند.
تابع fetch به صورت پیش فرض یک درخواست GET ارسال می کند. برای استفاده از یک متد دیگر، نام آن را به عنوان مقدار خاصیت متد در شی ای که به عنوان آرگومان دوم ارسال می کنید، مشخص کنید.
fetch('https://example.com/', { method: "HEAD" });
همچنین میتوانید درخواستهای HTTP را از بسیاری از زبانهای سمت سرور، از جمله PHP ارسال کنید. در آن زبان، کتابخانه curl یک روش رایج برای ارسال چنین درخواستهایی است.
کتابخانه curl دارای یک گزینه CURLOPT_CUSTOMREQUEST است که می توانید آن را برای تعیین یک روش تنظیم کنید.
if ($ch = curl_init($url)) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_exec($ch);
// ...
}
از طریق خط فرمان
ابزار خط فرمان curl به شما امکان می دهد داده ها را از طریق یکی از چندین پروتکل به یا از یک سرور انتقال دهید. HTTP (و HTTPS) دو مورد استفاده بسیار رایج هستند.
به طور پیش فرض، curl یک درخواست GET ارسال می کند، همانطور که می توانید با دستور زیر تأیید کنید:
curl -v -s -o /dev/null example.com/get-test
می توانید روش درخواست را در خط پنجم خروجی مشاهده کنید:
می توانید روش درخواستی را که curl ارسال می کند با استفاده از پرچم -X تغییر دهید:
curl -v -s -o /dev/null example.com/get-test -X POST
اکنون، curl با استفاده از روش POST درخواست ارسال می کند:
HTTP کاربردهای زیادی دارد
بیشتر کارهایی که در وب انجام میدهید شامل درخواستهای استاندارد GET و گاه به گاه POST برای ارسال فرم میشود. اما HTTP پروتکل بسیار گویاتر از آن چیزی است که این نشان می دهد.
برخی از متداولترین روشها منعکسکننده مدل CRUD هستند که HTTP را به یک پایه عالی برای ایجاد یک API متمرکز بر منابع تبدیل میکند.