توضیحات در مورد HTTP / RFC 9111: HTTP Caching 5.4. Pragma

http rfc 9111 http caching pragma
20 آبان 1403

وقتی که صحبت از یکی از مفاهیم HTTP مثل "Pragma" می‌شود، نباید فراموش کنیم که این یک هدر از نوع کنترل کش (Cache) است که معمولاً برای مدیریت یا تغییر رفتار کشینگ در سمت کلاینت یا سرور استفاده می‌شود. اما این هدر تا حدودی قدیمی شده و جای خود را به انتخاب‌های مؤثرتر و مدرن‌تری مثل Cache-Control داده است.

هدر Pragma بیشتر در مرورگرها و زیرساخت‌های قدیمی استفاده می‌شد. معمولاً توسعه‌دهندگان از آن برای اطمینان از بروز بودن محتوا از سمت سرور استفاده می‌کردند. به عنوان مثال، یک کاربرد رایج آن، تنظیم مقدار "no-cache" است که باعث می‌شود مرورگرها درخواست‌های جدیدی را برای منابع ارسال کنند.

علیرغم اینکه هنوز هم می‌توان از Pragma استفاده کرد، اما بهتر است بر روی تکنیک‌های جدیدتر همچون Cache-Control که انعطاف‌پذیری بیشتری دارند، تمرکز کنیم. این دستورات مدرن قادر به ارائه گزینه‌های بیشتری برای مدیریت منابع کش هستند. به عنوان مثال، می‌توانند مدت اعتبار کش را مشخص کنند یا تعیین کنند که کش‌ها در سطح سرور چه زمانی و چگونه به‌روز شوند.

همچنین با گذر زمان و با پیشرفت پروتکل‌های HTTP، شاهد آن هستیم که استفاده از تکنولوژی‌های کهنه مثل Pragma کمتر و کمتر می‌شود. این موضوع به دلیل سازگاری‌های بیشتر، امنیت بهتر و کارایی بیشتر تکنیک‌های جدید است.

به طور کلی، اگر در حال توسعه برنامه‌های مدرن وب هستید، توجه به استفاده از راه‌حل‌های مدرن و توصیه‌های جاری در استانداردهای RFC 9111 برای مدیریت کشینگ توصیه می‌شود تا از مشکلات احتمالی در سازگاری و امنیت جلوگیری شود.


GET /some-resource HTTP/1.1
Host: example.com
Pragma: no-cache

در خط اول، درخواست HTTP با روش GET برای دریافت یک منبع به نام /some-resource مشخص می‌شود. این درخواست یک درخواست رایجی برای دریافت داده‌ها از سرور است.
در خط دوم، Host یا میزبان که در اینجا example.com است مشخص می‌شود. این خط نشان‌دهنده سروری است که در حال تعامل با آن هستیم.
در خط سوم، هدر Pragma: no-cache آمده است که به صورت ساده به مرورگر می‌گوید قبل از استفاده از منابع کش، به سرور مراجعه کرده و محتوای جدید را دریافت کند.

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

؟

هدر Pragma چه تفاوتی با Cache-Control دارد؟

؟

آیا هنوز هم می‌توان از Pragma در پروژه‌های جدید استفاده کرد؟

؟

چگونه می‌توانیم مطمئن شویم که مرورگر محتوای کش‌شده‌ای دریافت نکند؟