اگر طراح وب باشید حتما با مشکلاتی که Cache Serverها درست میکنند درگیر شدهاید. دارید روی یک پروژه وب کار میکنید. همه تغییرات را در کامپیوتر محلی خودتان انجام میدهید و آماده فرستادن تغییرات میشوید. Style.css، تصاویر و فایلهای دیگر خود را میفرستید و سپس با خیال آسوده میخواهید بروید نتیجه را آنلاین ببینید. F5 را میزنید گررررررر تغییرات جدید نشان داده نمیشود. Ctrl + F5 را میزنید. افاقه نمیکند. Cache مرورگر را خالی میکنید. باز هم افاقه نمیکند. از یک مرورگر دیگر استفاده میکنید. باز هم، همان نسخه پیشین نشان داده میشود.
و این جاست که بر پدر و مادر تمامی کسانی که Cache Server را ساختهاند، درود میفرستید.
Cache Server چیست و چرا مشکل ایجاد میکند؟
Cache Server خدماتدهندهای است که در مراکز خدماتدهنده اینترنت نصب شده و صفحات وب یا فایلهای جانبی صفحات وب را بر روی خود ذخیره میکند تا در صورت درخواستِ دوباره کاربران به مشاهده آن صفحات، آنها را دوباره از سرور اصلی بارگزاری نکرده و آنها را از محل ذخیره خود برای کاربر بفرستد تا سبب کاهش هزینه پهنای باند گردد.
Cache Serverها بر پایه این اصل بنا شدهاند که چند کاربر ممکن است نیاز به مشاهده پایگاهها یا منابع یکسان داشته باشند (برای نمونه ممکن است 30% کاربران یک خدماتدهنده اینترنت، سایتهای یکسانی را مشاهده میکنند؛ برای نمونه یک سایت خبری یا یک سایت عمومی)
Cache Server اولین تقاضایی که برای مشاهده یک سایت (برای نمونه isna.ir) شد را در خود ذخیره میکنند. از این به بعد هر کاربر دیگری که مایل به دیدن این صفحه باشد، نسخه ذخیره شده بر روی Cache Server را دریافت کرده و دوباره سایت از سرور اصلی دریافت نمیشود.

اگر چه باید گفت که Cache Server مکانیزمهایی برای تشخیص ایجاد تغییر در نسخه ذخیره شده بر روی سرور خود و نسخه اصلی روی سرور را دارند؛ ولی در هنگام طراحی یک سایت، این مکانیزمها به درستی پاسخ نمیدهد. زیرا تغییراتی که طراح در سایت میدهد لحظه به لحظه است و Cache Server این احتمال را نمیدهد که این سایت به این سرعت تغییر کرده باشد، بنابراین فایلهای style.css و فایلهای تصویری را که در درون خود ذخیره کرده است (که قدیمی بوده و نسخههای جدیدی که شما به تازگی ارسالی کردهاید را شامل نمیشود) را برای کاربر میفرستد و از این رو شما تغییرات انجام شده خود را نمیبینید.
شاید برایتان این پرسش پیش بیاید که چرا سرویسدهندگان خدمات وب Cache Server نصب میکنند؟ پاسخ ساده است، خدماتدهندگان اینترنت برای پهنای باند هزینه میکنند و از این طریق میتوانند سبب کاهش هزینههای خود در زمینه پهنای باند باشند.
با کدام Cache Server میجنگیم؟
باید بدانیم که ما همیشه با توجه به اینترنتی که از آن استفاده میکنیم با چند Cache Server برابر هستیم. برای نمونه اگر در سازمان شما اینترنت از طریق ISA Server برای کاربران Share شده باشد و Cache Server در آن فعال شده باشد، در این صورت شما در نخستین گام با Cache Server داخلی سازمان خود برابر هستید. همچنین اگر سازمان شما از سرویسدهنده اینترنت x سرویس گرفته باشد و این سرویسدهنده اینترنت، Cache Server نصب کرده باشد یا شاید حتی ماژول سختافزاری Cache داشته باشد، شما در گام دوم با Cache Server سرویسدهنده خود برابر هستید.
همچنین همه میدانیم که همه مرورگها نیز به نوعی دارای یک Cache Server هستند که فایلها را در آن ذخیره میکنند. این Cache Server در IE با نام Temporary Internet Files و در FireFox با نام Browsing History شناخته میشود.
راههای مبارزه با Cache Server

- استفاده از کلید Ctrl + F5: این راه تنها به درد مبارزه با Cache Server مرورگر میخورد. در واقع شما به جای این که هر بار Cache مرورگر را خالی کنید، میتوانید با زدن کلید Ctrl + F5 از مرورگر بخواهید که فایلها را دوباره از خدماتدهنده اینترنت دریافت کند. این راه برای مبارزه با Cache Server خدماتدهنده اینترنت کارا نیست.
- فریب Cache Server با تغییر ظاهری URL: برخی پیشنهاد میکنند که با حذف www یا اضافه کردن چند کاراکتر Slash الکی در پایان آدرس Cache Server را فریب داد. یعنی اگر دفعه اول سایت خود را به صورت http://www.sample.com دیدهاید این بار به صورت http://sample.com یا به صورت http://sample.com/// ببینید. زیرا هر بار Cache Server فکر میکند که با سایت تازهای روبرو است و از این رو سایت را دوباره از سرور اصلی دریافت میکند. اما این روش با Cache Serverهای پیشرفته امروزی جواب نمیدهد. به عبارت دیگر Cache Serverهای امروزی (برای نمونه در Cache Server موجود در ISA Server همه آدرسهای بالا یکسان هستند) افزون بر این، حتی اگر Cache Server این دو آدرس را یکسان تشخیص ندهد، باز یک مشکل اساسی باقی است. منابعی که در صفحات شما به کار رفته است (برای نمونه یک فایل CSS) هنوز با آدرس پیشفرضی که شما آنجا نوشتهاید فراخوانی میشود و باز هم Cache Server جلوی آن را میگیرد.
- استفاده از فی.لت.ر شکن: این روش اگر چه پاسخ میدهد ولی یک مشکل اساسی دارد. سرویسدهنده از این به بعد آدرسی صفحهای را که فی.لت.رشکن دریافت کرده است Cache میکند و باز روز از نو روزی از نو.
- استفاده از دامین جایگزین: برخی پیشنهاد میکنند که از دامینهای جایگزین استفاده شود. این روش نیز چندان عملی نیست. مگر سایت ما چند تا دامین جایگزین دارد؟ بالاخره آنها هم Cache میشوند و سایت ما این وسط گرفتار میماند.
- تنظیم Cache-Cotnrol در HTML به صورت زیر:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
این روش هم پاسخ نمیدهد؛ زیرا بیشتر Cache Serverها جوری تنظیم شدهاند که به این Tag اهمیتی نمیدهند. در واقع تمام اینترنتهای متخلفی که من در این چند سال در ایران دیدهام به این تگ کاملا بیاهمیت هستند.
بهترین و عملیترین راه برای مبارزه با Cache Server چیست؟

روند کار Cache Serverها این گونه است:
1- کاربری درخواست دیدن سایت http://isna.ir را کرده است. اگر این سایت در Cache هست برو به 2 و اگر نیست برو به 3.
2- صفحه http://isna.ir را از روی Cache Server برای کاربر بفرست. برو به 4.
3- صفحه http://isna.ir را از روی سرور اصلی دریافت کن و آن را در Cache Serve ذخیره کن تا وقتی که کاربر بعدی یا همین کاربر در بار دوم درخواست دیدن این صفحه را کرد، از Cache Server برای او فرستاده شود.
4- پایان
خوب با توجه به این که بر اساس پروتوکل HTTP به همراه هر درخواستی میتوان یک Query String فرستاد، آدرس http://sample.com/index.php?keyword=iran و http://sample.com/index.php?keword=qom دو نشانی متفاوت به حساب میآیند؛ اگر چه هر دو در حال بارگزاری یک فایل مشترک (index.php) هستند. Cache Server هم این دو نشانی را یکسان در نظر نگرفته و هر دو را مجددا از روی سرور بارگزاری میکند. بر این اساس دو نشانی http://sample.com/style.css?q=1 با http://sample.com/style.css?q=2 متفاوت است، اگر چه هر دو در واقع از یک فایل استفاده میکنند.
برای همین من برای جلوگیری از Cache شدن فایل Style.css از کدی شبیه به این استفاده میکنم تا هر بار یک عدد Random تولید شده و Cache Server گول بخورد. (:
<link rel=stylesheet href="http://sample.com/style.css <?php echo "?q=".mt_rand(1, 1000000) ?>" type="text/css">
شما همین طور برای جلوگیری از Cache شدن فایل HTMLتان میتواند پس از فایل HTML یک Query String الکی وارد کنید و این طوری بود که من توانستم Cache Server را بکشم.
توجه داشته باشید که وقتی Development سایتتان تمام شد و دیگر نخواستید تغییری انجام دهید، حتما این مکانیزم را از صفحاتتان حذف کنید. زیرا Cache Server با همه معایبی که برای طراحان وب دارد، در نهایت سبب افزایش سرعت صفحات برای کاربران نهایی هم خواهده شد. زیرا صفحات از سرور محلی کاربر برای او فرستاده میشود که زمان کمتری نسبت به بارگزاری صفحات از سرور اصلی میبرد.
سلام
من این کدی که شما قرار داده بودید رو توی فایل index خودم قرار دادم ولی نشد
بی زحمت یه راهنمایی .......
این cache server واقعا 2 روز منو تلف کرد .... تا فهمیدم مشکل از کجاست !!
جالب بود!
من با اینکه تا حالا با Server Cache مشکلی نداشتم ولی اینکه وقتی کوئری تغییر کنه، رفتار سرورها تغییر می کنه ممکنه به درد بخوره!
ممنون
عالي بود .
salam khaste nabashid mikhastam bedonam shoma az sisteme mp4 sar dar miarin mp4 man ghodrate daryafte hichgone filio nadare bayad chekar konam age rahnamayim konid mamnoon misham
استفاده از وی پی ان بهترین و ساده ترین راهه!
میپذیرم که در تئوری در VPN صفحهای Cache نمیشود چون که به احتمال خیلی زیاد سروری که به شما VPN داده است Cache Server نصب نکرده و به دلیل Secure بودن ارتباط، ISPهای میان راه هم اطلاعاتی از محتوای اطلاعات رد و بدل شده پیدا نمیکنند که بخواهند آن را Cache کنند. اما مسئله این است که این روش برای من کار نمیکند؛ خودم هم نمیدانم چرا؟!
سلام. عالی بود. درد بزرگ برنامه نویسان هست شاید !!! :d
فرستادن دیدگاه تازه