با سلام و احترام خدمت شما خواننده ی گرامی؛ در این مقاله سعی در توضیح Keep Alive داریم. Keep Alive در زمره ی اتصالات پایا دسته بندی می شود. این نوع اتصالات به صورت زیر تعریف می شوند:
HTTP persistent connection, also called HTTP keep-alive, or HTTP connection reuse, is the idea of using a single TCP connection to send and receive multiple HTTP requests/responses, as opposed to opening a new connection for every single request/response pair.
ترجمه: اتصال پایای HTTP، که با نام Keep Alive و یا اتصال چند بار مصرف HTTP نیز شناخته می شود، شامل استفاده از یک اتصال TCP برای ارسال و دریافت درخواست ها و پاسخ های متعدد HTTP (به جای باز کردن و بستن یک اتصال برای هر درخواست) است.منبع
اما تعریف ساده و خودمانی تر Keep Alive (که در فارسی عموماً با نام های اتصال پایا، اتصال سِمِج و ... شناخته می شود) عبارت است از:
Keep Alive تکنیکی است که از طریق آن می توان به جای باز کردن یک اتصال جدید برای هر درخواست به سرور، از یک اتصال TCP استفاده و درخواست ها را از طریق آن ارسال کرد. به عبارت دیگر، این تکنیک نوعی ارتباط بین وب سرور و مرورگر بوده و طی آن وب سرور به مرورگر اعلام میکند که می تواند در آنِ واحد بیشتر از یک فایل دریافت کند. نام دیگر این تکنیک persistent connection می باشد.
برای درک بهتر موضوع به تصویر زیر نگاه کنید؛ این تصویر نحوه ی ارتباط بین مرورگر و وب سرور را در حالت ارتباط پایا و غیر آن نمایش می دهد.
ارتباط پایا با استفاده از HTTP Header زیر فعال می شود:
"Connection: Keep-Alive"
بنابراین اگر ارتباط پایا فعال نباشد در HTTP Header خود با "connection: close" مواجه خواهید شد. آن را به "connection: keep-alive" تغییر دهید تا این تکنیک برای شما فعال شود. حال سوال اینجاست که چطور این کار را انجام بدهیم؟ فعال سازی Keep Alive به وب سروری که از آن استفاده می کنید و سطح دسترسی شما بستگی دارد. ما رایج ترین روش های آن را ذکر می کنیم، اما قبل از آن:
به وب سایت GiftOfSpeed مراجعه کنید و آدرس سایت خود را در قسمت خواسته شده وارد کنید. نمونه ی استعلام برای سایت ما:
اگر مانند تصویر در قسمت Connection عبارت Keep Alive نوشته شده بود، نشان دهنده ی این است که اتصال شما از طریق تکنیک Keep Alive بوده و این تکنیک روی وب سرور شما فعال است. اگر غیر از این بود می توانید با یکی از روش های زیر Keep Alive را برای خود فعال کنید:
اگر به فایل config مربوط به وب سرور خود دسترسی ندارید، می توانید از فایل htaccess. استفاده کنید. برای این کار، دستور زیر را در فایل htaccess. خود کپی کنید:
<ifModule mod_headers.c> Header set Connection keep-alive </ifModule>
توجه: فایل htaccess. بسیار مهم و حساس است و هر گونه تغییر اشتباه در آن می تواند پیامد های سنگینی برای وب سایت شما داشته باشد. قبل از اعمال هر تغییر از آن یک بکاپ بگیرید (توضیح بیشتر در مورد فایل .htaccess در این لینک). این روش معمولا تمام محدودیت های وب سرور و هاست شما را دور می زند.
اگر به فایل config وب سرورِ Apache خود دسترسی دارید، می توانید از همانجا Keep Alive را فعال کنید. شما باید بتوانید دستورات زیر را در فایل config مشاهده کنید:
# # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive On # # MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. Set to 0 to allow an unlimited amount. # We recommend you leave this number high, for maximum performance. # MaxKeepAliveRequests 100 # # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 100
توضیح: علامت های # کامنت هستند.
برای فعال سازی تکنیک مذکور در این وب سرور می توانید از HttpCoreModule استفاده کنید. باید به دنبال دستور خاصی در این فایل باشید؛ دستوری به اسم "keepalive_disable". اگر چنین دستوری در فایل مذکور مشاهده کردید یعنی Keep Alive غیر فعال است. قبل از حذف این دستور از فایل (برای فعال سازی) مطمئن شوید که چرا چنین دستوری در فایل HttpCoreModule موجود است.
بی مهابا و حساب نشده دست به تغییرات نزنید.
یک مثال از وب سایت رسمی NGINX:
Syntax: keepalive_disable none | browser ...; Default: keepalive_disable msie6; Context: http, server, location
خط اول، قالب کلی دستور و خط دوم حالت پیش فرض وب سرور است.
در حالت پیش فرض (خط دوم)، Keep Alive برای مرورگر های msie6 غیر فعال می شود و برای دیگر مرورگر ها فعال خواهد بود.
Msie6 (مخفف Microsoft Internet Explorer 6) در اینجا به معنی IE6 و ورژن های قبل تر است. مثال دیگر مقدار safari است که Keep Alive را برای مرورگر های safari غیر فعال می کند. مقدار none نیز Keep Alive را برای تمامی مرورگر ها فعال می گذارد.
این مسئله جزئیات بیشتری نیز دارد که برای مطالعه ی بیشتر می توانید به این لینک مراجعه کنید.
Keep Alive در این وب سرور، مانند بسیاری دیگر از وب سرور ها، به صورت پیش فرض فعال است اما ممکن است روی حالتی به نام "smart keep-alive" (در فارسی: اتصال پایای هوشمند) تنظیم شده باشد.
این گزینه مخصوص وب سایت های حجیم است و در صورت فعال بودن ممکن است در برخی از برنامه های تشخیصِ فعال بودن Keep Alive شناسایی نشود و در نتیجه شما تصور کنید که برای شما غیر فعال است.
"smart keep-alive" ابتدا پس از درخواست فایل اولیه (فایل HTML) یک دستورِ بستن اتصال را به Header ارسال می کند و سپس درخواست تمامی فایل های دیگر (مانند CSS و JS و تصاویر و ...) را با Keep Alive ارسال می کند. بدین شکل در زمان شلوغی سرور و درخواست های زیاد، کاربران بیشتری می توانند در آنِ واحد به سایت شما متصل شوند.
نکته (فقط برای وب سرور Litespeed): اگر وب سایت شما ترافیک بسیار بالایی ندارد و آن قدر ها مشهور نیست (اکثر وب سایت های ایرانی مشمول این قانون هستند) بهتر است "smart keep-alive" را خاموش کنید تا تمامی اتصالات شما به صورت Keep Alive باشد.
اگر قرار باشد وب سایتی در مرورگری نمایش داده شود، آن مرورگر حتما از یک وب سرور تعدادی فایل (منابع) درخواست می کند؛ بدین ترتیب تعامل کوتاهی بین مرورگر و وب سرور صورت می گیرد که طی آن وب سرور یا جواب مثبت می دهد و یا منفی.
بنابراین مرورگر ابتدا فایل HTML را دریافت کرده و می خواند سپس دیگر منابعی که HTML به آنها وابسته است (مانند CSS و JS و تصاویر و ...) را دریافت می کند.
از طرف دیگر میدانیم که صفحات وب مخلوطی از فایل ها و تصاویر متعدد هستند و اگر قرار باشد برای هر کدام از این فایل ها و تصاویر یک اتصال جداگانه (تعامل کوتاهی که بین مرورگر و وب سرور ذکر شد) انجام بگیرد، نمایش وب سایت ها بسیار بیشتر از حالت عادی طول می کشد.
بنابراین زمانی که Keep Alive فعال نباشد، پروسه ی مذکور زمان بیشتری به طول خواهد انجامید و از طرفی هم منابع سرور و هزینه ی ما به هدر می روند.
بسیاری از مدیران وب سایت ها و حتی برنامه نویسان بر این باورند که نیازی نیست نگران اتصالات HTTP باشند چرا که امروزه تمام آنها پایا (persistent) هستند. با اینکه این گفته عموما (و نه لزوما) صحیح است اما بسیاری از وب سایت ها (مخصوصا در ایران) از خدمات میزبانی اشتراکی استفاده می کنند؛ بدین معنی که چندین و چند وب سایت روی یک سرور نگهداری و میزبانی می شوند. این سرور های اشتراکی ممکن است جهت حفظ کارکرد و کارآمدی خود و همچنین پایین آوردن هزینه ها، بدون اطلاع کاربر اتصالات را ببندند. بنابراین جایی برای ریسک پذیری نمی ماند و جهت حفظ حقوق خود باید حتما بررسی کنید که چنین اتفاقی برای شما رخ نداده باشد.
امیدوارم مطالب این مقاله برای شما مفید بوده و به اعتلای دانش عمومی در کشورمان کمکی کرده باشد. در پناه حق.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.