شرایط پیش‌نیاز در پروتکل HTTP

http preconditions rfc9110
20 آبان 1403

شرایط پیش‌نیاز در پروتکل HTTP یکی از مواردی است که در هنگام ارسال درخواست‌ها به سرور برای حفظ یکپارچگی داده‌ها و جلوگیری از به‌روزرسانی‌های ناخواسته استفاده می‌شود. در واقع، شرایط پیش‌نیاز به ما این امکان را می‌دهد تا تنها در صورتی که شرایط خاصی برآورده شده باشد، عملیات‌هایی مانند به‌روز رسانی یا حذف را انجام دهیم.

یکی از مهم‌ترین کاربردهای این ویژگی در کاهش برخورد همزمانی و از دست رفتن تغییرات است. مثلا زمانی که چند کاربر به صورت همزمان بر روی یک منبع کار می‌کنند، استفاده از این پیش‌شرط‌ها می‌تواند مفید باشد. به عنوان مثال، می‌توانیم تعیین کنیم که تنها اگر داده‌ها از زمان آخرین دریافت کاربر تغییر نکرده است، به‌روز شود.

در HTTP، شرایط پیش‌نیاز معمولاً از طریق هدرهای خاص مانند If-Match یا If-None-Match برای ETag و همچنین If-Modified-Since برای تاریخ آخرین تغییر اعمال می‌شود.

به کارگیری دقیق این شرایط پیش‌نیاز می‌تواند به طور قابل توجهی به بهبود کارایی و قابلیت اطمینان برنامه‌های تحت وب کمک کند. این کار با اطمینان از این که تغییرات در منابع تنها زمانی اعمال شوند که شرایط خاصی برآورده شده‌اند، انجام می‌شود.

بگذارید نگاهی بیندازیم به یک نمونه کد که نشان می‌دهد چگونه می‌توان از این شرایط در درخواست‌های HTTP استفاده کرد.


GET /resource HTTP/1.1
Host: example.com
If-None-Match: "etag12345"

در این قطعه کد ساده، ما یک درخواست GET به سرور ارسال می‌کنیم. این درخواست شامل یک هدر If-None-Match است که بیان می‌کند درخواست فقط زمانی موفق خواهد بود که مقدار ETag فعلی منبع برابر یا متفاوت با "etag12345" باشد.

درصورتی‌که ETag با مقداری که ارسال کرده‌ایم تطابق داشته باشد، سرور ممکن است به ما کد وضعیت 304 «تغییری نکرده» ارسال کند و محتوای منبع را بازنگرداند، که باعث به‌صرفه‌جویی در پهنای باند و منابع می‌شود.

سوالات متداول

؟

چگونه می‌توان از شرایط پیش‌نیاز برای به‌روز رسانی منابع استفاده کرد؟

؟

چه زمانی استفاده از ETag در HTTP مفید است؟

؟

What does a 304 status code indicate?