
Cache و Cookie چیست؟ بررسی کاربرد آنها در HTTP
پروتکل HTTP بهصورت پیشفرض وضعیت درخواستهای قبلی را نگهداری نمیکند. هر درخواست برای سرور یک درخواست مستقل است و سرور بدون دریافت اطلاعات تکمیلی نمیتواند تشخیص دهد که درخواست فعلی به کدام کاربر یا فعالیت قبلی او مربوط میشود. مرورگرها و سرورها برای افزایش سرعت سایت، کاهش درخواستهای تکراری و نگهداری بعضی اطلاعات کاربران از Cache و Cookie استفاده میکنند. این دو مفهوم کاربردهای متفاوتی دارند، اما هر دو نقش مهمی در ارتباط میان مرورگر و سرور ایفا میکنند. در قسمت پنجم دوره آموزش پروتکل HTTP با مفهوم Cache و Cookie آشنا میشویم. سپس کاربرد آنها، روش انتقال کوکی میان مرورگر و سرور، تفاوت Cache و Cookie و نکات مهم امنیتی را بررسی میکنیم.
Cache چیست؟
Cache یا حافظه کش محلی برای نگهداری موقت اطلاعاتی است که احتمال دارد دوباره مورد استفاده قرار بگیرند. مرورگر میتواند بعضی فایلها و پاسخهای دریافتشده از سرور را در حافظه کش ذخیره کند. برای مثال، یک صفحه وب ممکن است از فایلهای CSS، JavaScript، تصویر و فونت استفاده کند. اگر مرورگر این فایلها را در حافظه کش نگهداری کند، هنگام مراجعه دوباره کاربر به سایت لازم نیست تمام آنها را دوباره از سرور دریافت کند. مرورگر میتواند نسخه ذخیرهشده فایل را استفاده کند و در نتیجه صفحه سریعتر نمایش داده میشود.
Cache چه کاربردی دارد؟
هدف اصلی Cache جلوگیری از دریافت دوباره اطلاعاتی است که قبلاً دریافت شدهاند و هنوز اعتبار دارند. این کار سرعت سایت را افزایش میدهد و مصرف اینترنت و منابع سرور را کاهش میدهد. مهمترین کاربردهای Cache عبارتاند از:
- افزایش سرعت بارگذاری صفحههای سایت
- کاهش تعداد درخواستهای ارسالشده برای سرور
- کاهش مصرف اینترنت کاربران
- کاهش فشار واردشده به سرور
- استفاده دوباره از فایلهای ثابت مانند تصویر، CSS و JavaScript
- بهبود عملکرد سایت در اتصالهای اینترنتی ضعیف
Cache چگونه سرعت سایت را افزایش میدهد؟
فرض کنید کاربر برای اولینبار وارد یک سایت میشود. مرورگر برای نمایش صفحه، فایل HTML، تصویرها، فایلهای CSS و کدهای JavaScript را از سرور دریافت میکند. اگر سرور اجازه ذخیره این فایلها را بدهد، مرورگر آنها را در حافظه کش نگهداری میکند. هنگام بازدید دوباره، مرورگر ابتدا کش را بررسی میکند. اگر نسخه ذخیرهشده هنوز معتبر باشد، از همان نسخه استفاده میکند. در این حالت مرورگر مجبور نیست فایل را دوباره دانلود کند. به همین دلیل، صفحه در زمان کوتاهتری نمایش داده میشود.
Cache چگونه درخواستهای تکراری را کاهش میدهد؟
بدون استفاده از Cache، مرورگر ممکن است در هر بار نمایش صفحه تمام فایلهای موردنیاز را دوباره از سرور درخواست کند. این موضوع تعداد درخواستها و میزان انتقال اطلاعات را افزایش میدهد. با فعالبودن Cache، مرورگر فایلهای معتبر را از حافظه محلی میخواند. بنابراین، برای تمام فایلهای صفحه درخواست جدیدی به سرور ارسال نمیشود. برای مثال، لوگوی یک سایت ممکن است در صدها صفحه نمایش داده شود. اگر مرورگر این تصویر را در کش ذخیره کند، لازم نیست با بازشدن هر صفحه آن را دوباره دانلود کند.
مرورگر چگونه مدت نگهداری Cache را تشخیص میدهد؟
سرور میتواند با استفاده از هدرهای HTTP مشخص کند که مرورگر یک پاسخ را ذخیره کند یا خیر و تا چه زمانی اجازه استفاده از نسخه ذخیرهشده را دارد. یکی از هدرهای مهم برای مدیریت کش، هدر Cache-Control است:
Cache-Control: max-age=3600دستور max-age=3600 به مرورگر اعلام میکند که میتواند پاسخ را برای مدت ۳۶۰۰ ثانیه، یعنی یک ساعت، معتبر در نظر بگیرد. نمونه دیگری از این هدر:
Cache-Control: no-storeمقدار no-store اعلام میکند که مرورگر و سایر کشها نباید پاسخ را ذخیره کنند. این مقدار معمولاً برای بعضی اطلاعات حساس کاربرد دارد.
مقادیر پرکاربرد Cache-Control
| مقدار | کاربرد |
|---|---|
| max-age | مدت اعتبار پاسخ را بر حسب ثانیه مشخص میکند. |
| no-store | از ذخیره پاسخ در حافظه کش جلوگیری میکند. |
| no-cache | مرورگر را ملزم میکند پیش از استفاده دوباره، اعتبار پاسخ را از سرور بررسی کند. |
| public | اجازه ذخیره پاسخ در کش مرورگر و کشهای مشترک را میدهد. |
| private | اجازه ذخیره پاسخ را فقط در کش خصوصی کاربر میدهد. |
مقادیر no-cache و no-store مفهوم یکسانی ندارند. no-store از ذخیره پاسخ جلوگیری میکند، اما no-cache اجازه ذخیره را میدهد و مرورگر باید پیش از استفاده دوباره، اعتبار پاسخ را بررسی کند.
اعتبارسنجی Cache چیست؟
گاهی مرورگر یک فایل را در کش دارد، اما باید بررسی کند که نسخه جدیدتری از آن روی سرور وجود دارد یا خیر. در این حالت مرورگر میتواند بهجای دریافت کامل فایل، یک درخواست اعتبارسنجی برای سرور ارسال کند. هدرهای ETag و Last-Modified میتوانند در این فرایند استفاده شوند. سرور با کمک آنها تشخیص میدهد که محتوای موردنظر از زمان دریافت نسخه قبلی تغییر کرده است یا خیر. اگر محتوا تغییر نکرده باشد، سرور میتواند کد وضعیت زیر را برگرداند:
HTTP/1.1 304 Not Modifiedکد 304 نشان میدهد که محتوا تغییر نکرده است و مرورگر میتواند از نسخه موجود در کش استفاده کند. در این حالت نیازی به ارسال دوباره بدنه کامل پاسخ نیست.
Cookie چیست؟
Cookie یا کوکی مقدار کوچکی از اطلاعات است که یک سایت میتواند از مرورگر بخواهد آن را ذخیره کند. مرورگر این اطلاعات را نگهداری میکند و در درخواستهای بعدی مرتبط، آنها را برای سرور میفرستد. کوکیها به سایت کمک میکنند کاربر یا وضعیت فعالیت او را میان چند درخواست شناسایی کند. برای مثال، سایت میتواند با استفاده از یک شناسه ذخیرهشده در Cookie تشخیص دهد که درخواستهای مختلف به یک کاربر تعلق دارند. کوکی معمولاً شامل یک نام و یک مقدار است:
sessionId=12345در این نمونه، sessionId نام کوکی و 12345 مقدار آن است.
چرا در HTTP به Cookie نیاز داریم؟
HTTP بهصورت پیشفرض Stateless است. Stateless به این معناست که سرور هر درخواست را مستقل از درخواستهای قبلی بررسی میکند. برای مثال، کاربر اطلاعات ورود خود را برای سرور ارسال میکند. چند لحظه بعد درخواست دیگری برای مشاهده صفحه حساب کاربری میفرستد. سرور برای تشخیص ارتباط میان این دو درخواست به اطلاعاتی نیاز دارد.
یکی از روشهای حل این مسئله استفاده از Cookie است. سرور میتواند بعد از ورود موفق کاربر، یک شناسه ایجاد کند و آن را در قالب Cookie برای مرورگر بفرستد. مرورگر نیز این شناسه را در درخواستهای بعدی ارسال میکند.
اطلاعات چگونه در Cookie ذخیره میشوند؟
سرور برای ایجاد یا تغییر یک Cookie از هدر Set-Cookie در پاسخ HTTP استفاده میکند:
Set-Cookie: sessionId=12345مرورگر پس از دریافت این هدر، کوکی را براساس تنظیمات آن ذخیره میکند. سپس در درخواستهای بعدی مرتبط، کوکی را از طریق هدر Cookie برای سرور میفرستد:
Cookie: sessionId=12345بنابراین، Set-Cookie معمولاً در پاسخ سرور و Cookie در درخواست مرورگر قرار میگیرد.
Cookie چگونه میان مرورگر و سرور ارسال میشود؟
فرایند ساده ایجاد و ارسال Cookie شامل مراحل زیر است:
- مرورگر یک درخواست برای سرور ارسال میکند.
- سرور پاسخ را همراه هدر Set-Cookie برمیگرداند.
- مرورگر Cookie را ذخیره میکند.
- مرورگر در درخواستهای بعدی، Cookie مرتبط را برای سرور میفرستد.
- سرور مقدار Cookie را بررسی میکند و کاربر یا وضعیت او را تشخیص میدهد.
نمونه پاسخ سرور:
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: sessionId=12345; Path=/; HttpOnly
<h1>Welcome</h1>نمونه درخواست بعدی مرورگر:
GET /account HTTP/1.1
Host: example.com
Cookie: sessionId=12345سرور میتواند شناسه Session را دریافت و اطلاعات مرتبط با کاربر را در سمت سرور پیدا کند.
Cookie چه کاربردهایی دارد؟
کوکیها فقط برای ورود کاربران استفاده نمیشوند. سایتها میتوانند از آنها برای نگهداری مقدار کمی از اطلاعات موردنیاز استفاده کنند. کاربردهای رایج Cookie عبارتاند از:
- شناسایی وضعیت ورود کاربر
- نگهداری شناسه Session
- ذخیره تنظیمات زبان سایت
- نگهداری انتخابهای ساده کاربر
- ثبت بعضی اطلاعات مربوط به سبد خرید
- تحلیل نحوه استفاده کاربران از سایت
- شخصیسازی بخشهایی از سایت
کاربرد Cookie در ورود کاربران چیست؟
یکی از مهمترین کاربردهای Cookie نگهداری وضعیت ورود کاربران است. بعد از ورود موفق، سرور میتواند یک Session برای کاربر ایجاد کند و شناسه آن را در Cookie قرار دهد. در درخواستهای بعدی، مرورگر شناسه Session را برای سرور ارسال میکند. سرور با بررسی این شناسه متوجه میشود که درخواست به کدام کاربر واردشده تعلق دارد. معمولاً بهتر است اطلاعات حساس کاربر مستقیماً داخل Cookie قرار نگیرند. برای مثال، قراردادن رمز عبور در Cookie کار درستی نیست. Cookie میتواند فقط یک شناسه تصادفی و غیرقابل حدس داشته باشد و اطلاعات اصلی در سمت سرور نگهداری شوند.
Session Cookie و Persistent Cookie چه تفاوتی دارند؟
کوکیها از نظر مدت نگهداری میتوانند به دو گروه کلی تقسیم شوند.
Session Cookie
Session Cookie معمولاً تا پایان نشست مرورگر نگهداری میشود. اگر برای کوکی زمان انقضا تعیین نشده باشد، مرورگر آن را بهعنوان Session Cookie در نظر میگیرد.
Set-Cookie: sessionId=12345Persistent Cookie
Persistent Cookie دارای زمان انقضا است و میتواند پس از بستهشدن مرورگر نیز باقی بماند. برای تعیین مدت نگهداری میتوان از ویژگیهای Max-Age یا Expires استفاده کرد.
Set-Cookie: language=fa; Max-Age=2592000در این نمونه، مرورگر میتواند کوکی را برای مدت ۲۵۹۲۰۰۰ ثانیه، یعنی حدود ۳۰ روز، نگهداری کند.
ویژگیهای مهم Cookie
سرور میتواند همراه هر Cookie ویژگیهایی قرار دهد تا دامنه استفاده، مدت نگهداری و سطح امنیت آن را مشخص کند.
| ویژگی | کاربرد |
|---|---|
| Expires | تاریخ و زمان انقضای Cookie را مشخص میکند. |
| Max-Age | مدت نگهداری Cookie را بر حسب ثانیه تعیین میکند. |
| Path | مسیرهایی را مشخص میکند که Cookie در درخواستهای آنها ارسال میشود. |
| Domain | دامنهای را مشخص میکند که Cookie به آن تعلق دارد. |
| Secure | باعث میشود Cookie فقط از طریق ارتباط HTTPS ارسال شود. |
| HttpOnly | دسترسی مستقیم کدهای JavaScript صفحه به Cookie را محدود میکند. |
| SameSite | نحوه ارسال Cookie در درخواستهای میان سایتهای مختلف را کنترل میکند. |
نمونه یک Cookie با تنظیمات امنیتی
Set-Cookie: sessionId=12345; Path=/; Secure; HttpOnly; SameSite=Laxدر این نمونه:
- Path=/ مشخص میکند که Cookie در تمام مسیرهای سایت قابل ارسال است.
- Secure ارسال Cookie را به ارتباط HTTPS محدود میکند.
- HttpOnly دسترسی مستقیم JavaScript به Cookie را محدود میکند.
- SameSite=Lax به کنترل ارسال Cookie در درخواستهای میان سایتها کمک میکند.
تفاوت Cache و Cookie چیست؟
Cache و Cookie هر دو میتوانند اطلاعاتی را در مرورگر نگهداری کنند، اما هدف و رفتار یکسانی ندارند. Cache بیشتر برای ذخیره فایلها و پاسخهای دریافتشده استفاده میشود تا سرعت سایت افزایش پیدا کند. Cookie نیز مقدار کمی از اطلاعات را نگهداری میکند تا سایت بتواند کاربر، نشست یا تنظیمات او را میان چند درخواست تشخیص دهد.
| ویژگی | Cache | Cookie |
|---|---|---|
| هدف اصلی | افزایش سرعت و کاهش دانلودهای تکراری | نگهداری وضعیت، شناسه یا تنظیمات کاربر |
| نوع اطلاعات | فایلها و پاسخهایی مانند تصویر، CSS و JavaScript | مقدارهای کوچک مانند شناسه Session یا زبان انتخابی |
| ارسال برای سرور | محتوای کش در هر درخواست برای سرور ارسال نمیشود. | Cookie مرتبط میتواند همراه درخواست برای سرور ارسال شود. |
| مدیریت از طریق HTTP | با هدرهایی مانند Cache-Control مدیریت میشود. | با هدرهای Set-Cookie و Cookie مدیریت میشود. |
| کاربرد در ورود کاربر | معمولاً برای نگهداری وضعیت ورود استفاده نمیشود. | میتواند شناسه مربوط به وضعیت ورود را نگهداری کند. |
| مدت نگهداری | به قوانین کش و اعتبار پاسخ بستگی دارد. | به نوع Cookie و زمان انقضای آن بستگی دارد. |
آیا حذف Cache باعث خروج از حساب کاربری میشود؟
حذف Cache معمولاً فایلهای ذخیرهشده مانند تصویرها، CSS، JavaScript و بعضی پاسخها را پاک میکند. این کار در بیشتر مواقع باعث خروج کاربر از حساب نمیشود؛ زیرا اطلاعات ورود معمولاً از طریق Cookie یا روشهای مشابه مدیریت میشوند. اما حذف Cookie میتواند شناسه Session یا اطلاعات ورود را از بین ببرد. به همین دلیل، کاربر ممکن است پس از حذف کوکیها مجبور شود دوباره وارد حساب خود شود.
آیا Cookie میتواند اطلاعات زیادی ذخیره کند؟
Cookie برای ذخیره مقدار کمی از اطلاعات طراحی شده است و فضای محدودی دارد. همچنین مرورگر ممکن است Cookie را همراه درخواستهای مرتبط برای سرور ارسال کند. بنابراین، قراردادن اطلاعات زیاد در Cookie حجم درخواستها را افزایش میدهد. بهتر است فقط اطلاعات ضروری و کوچک مانند شناسه Session یا یک تنظیم ساده در آن قرار بگیرند.
نکات امنیتی مربوط به Cookie
Cookie میتواند اطلاعات مهمی مانند شناسه Session را نگهداری کند. اگر فرد دیگری به این شناسه دسترسی پیدا کند، ممکن است بتواند از نشست کاربر سوءاستفاده کند. به همین دلیل، برنامهنویسان باید تنظیمات امنیتی Cookie را جدی بگیرند. مهمترین نکات امنیتی Cookie عبارتاند از:
- برای سایت و ارتباط میان مرورگر و سرور از HTTPS استفاده کنید.
- برای Cookieهای حساس ویژگی Secure را فعال کنید.
- برای شناسه Session از ویژگی HttpOnly استفاده کنید.
- ویژگی SameSite را براساس نیاز برنامه تنظیم کنید.
- رمز عبور و اطلاعات حساس را مستقیماً در Cookie ذخیره نکنید.
- برای Cookieهای حساس زمان نگهداری بسیار طولانی تعیین نکنید.
- شناسههای Session باید تصادفی و غیرقابل حدس باشند.
- پس از خروج کاربر، Session و Cookie مربوط به آن را بهدرستی بیاعتبار کنید.
مدت نگهداری Cookie چگونه مشخص میشود؟
مدت نگهداری Cookie به هدف آن بستگی دارد. بعضی کوکیها فقط تا پایان نشست مرورگر موردنیاز هستند و بعضی دیگر باید برای مدت بیشتری باقی بمانند. برای مثال، Cookie مربوط به زبان انتخابی کاربر میتواند چند هفته یا چند ماه نگهداری شود. در مقابل، Cookie مربوط به یک فعالیت حساس بهتر است مدت کوتاهتری اعتبار داشته باشد. نمونه تعیین مدت اعتبار یک Cookie:
Set-Cookie: language=fa; Max-Age=2592000; Path=/برای حذف Cookie نیز سرور میتواند زمان اعتبار آن را به پایان برساند:
Set-Cookie: language=; Max-Age=0; Path=/در این نمونه، مقدار Max-Age=0 به مرورگر اعلام میکند که Cookie را حذف کند.
چگونه Cache و Cookie را در مرورگر مشاهده کنیم؟
مرورگرهایی مانند Chrome و Firefox ابزارهایی برای مشاهده Cache، Cookie و هدرهای مرتبط دارند. برای بررسی آنها ابتدا ابزارهای توسعهدهنده مرورگر را باز کنید. در بخش Network میتوانید یک درخواست را انتخاب و هدرهای زیر را بررسی کنید:
- Cache-Control
- ETag
- Last-Modified
- Cookie
- Set-Cookie
در بخش Application یا Storage نیز میتوانید کوکیهای ذخیرهشده برای هر سایت را مشاهده کنید. این قسمت معمولاً نام، مقدار، دامنه، مسیر، زمان انقضا و ویژگیهای امنیتی هر Cookie را نمایش میدهد.
نمونه استفاده همزمان از Cache و Cookie
فرض کنید یک کاربر وارد فروشگاه اینترنتی شده است. مرورگر فایل لوگو و فایل CSS فروشگاه را در Cache نگهداری میکند تا صفحههای بعدی سریعتر نمایش داده شوند. در همان زمان، مرورگر یک Cookie شامل شناسه Session کاربر دارد. هنگام ارسال درخواست برای مشاهده سبد خرید، مرورگر این Cookie را برای سرور میفرستد تا سرور کاربر و سبد خرید او را تشخیص دهد. در این مثال، Cache سرعت نمایش سایت را افزایش میدهد و Cookie به نگهداری وضعیت کاربر کمک میکند. بنابراین، هرکدام هدف جداگانهای دارند.
چرا شناخت Cache و Cookie مهم است؟
برنامهنویسان وب هنگام ساخت سایت و API با Cache و Cookie سروکار دارند. استفاده درست از Cache میتواند عملکرد سایت را بهتر کند و استفاده درست از Cookie نیز به مدیریت ورود و وضعیت کاربران کمک میکند. شناخت این دو مفهوم کمک میکند:
- دلیل نمایش نسخه قدیمی یک فایل را پیدا کنید.
- سرعت بارگذاری سایت را افزایش دهید.
- تعداد درخواستهای تکراری را کاهش دهید.
- وضعیت ورود کاربران را مدیریت کنید.
- کوکیهای درخواست و پاسخ را بررسی کنید.
- مشکلات مربوط به Session را پیدا کنید.
- تنظیمات امنیتی Cookie را بهتر انتخاب کنید.
جمعبندی
Cache محلی برای نگهداری موقت فایلها و پاسخهای دریافتشده است. مرورگر با استفاده دوباره از اطلاعات موجود در کش میتواند سرعت بارگذاری سایت را افزایش دهد و تعداد درخواستهای تکراری را کاهش دهد. Cookie مقدار کوچکی از اطلاعات است که مرورگر آن را ذخیره میکند و در درخواستهای مرتبط برای سرور میفرستد. سایتها میتوانند از Cookie برای نگهداری شناسه Session، تشخیص وضعیت ورود، ذخیره زبان و ثبت بعضی تنظیمات کاربران استفاده کنند. سرور با هدر Set-Cookie از مرورگر میخواهد یک Cookie را ذخیره کند و مرورگر نیز با هدر Cookie آن را در درخواستهای بعدی برای سرور میفرستد. ویژگیهای Secure، HttpOnly و SameSite نیز به افزایش امنیت Cookie کمک میکنند.
Cache بیشتر برای افزایش سرعت و جلوگیری از دانلودهای تکراری کاربرد دارد، اما Cookie برای نگهداری وضعیت و اطلاعات کوچک کاربران استفاده میشود. در این قسمت با Cache، Cookie، نحوه انتقال کوکی میان مرورگر و سرور، کاربرد آنها، تفاوت کش و کوکی و نکات مهم امنیتی آشنا شدیم. برای مشاهده تمام جلسات وارد صفحه آموزش پروتکل HTTP شوید. همچنین برای مرور قسمت قبل میتوانید مقاله هدر HTTP چیست؟ را مطالعه کنید.























فرم افزودن دیدگاه
با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.