ارور 406 چیست؟ بررسی کامل خطای 406 Not Acceptable و روشهای رفع آن

اگر هنگام ورود به یک سایت با پیامی مانند 406 Not Acceptable مواجه شدهاید، احتمالاً برایتان این سؤال پیش آمده که این خطا دقیقاً به چه معناست و چرا به جای نمایش صفحه، سرور چنین پیغامی را نشان میدهد. ارور 406 یکی از کدهای وضعیت HTTP است که معمولاً در شرایطی اتفاق میافتد که سرور نمیتواند پاسخ مورد انتظار را بر اساس نوع درخواست ارسالشده به کاربر ارائه کند.
این خطا در مقایسه با خطاهایی مانند 404 یا 500 کمتر دیده میشود، اما در بعضی سایتهای وردپرسی، فروشگاهی و حتی وبسایتهایی که از سیستمهای امنیتی سرور استفاده میکنند، ممکن است بیشتر مشاهده شود. نکته مهم این است که برای رفع ارور 406 نباید بلافاصله سراغ تغییرات اساسی در سایت رفت؛ ابتدا باید مشخص شود خطا از مرورگر و درخواست کاربر ناشی شده، یا سرور، فایروال، افزونه امنیتی و تنظیمات هاست جلوی درخواست را گرفتهاند.
ارور 406 چیست؟
کد HTTP 406 Not Acceptable به زبان ساده یعنی سرور درخواست کاربر را دریافت کرده، اما نمیتواند پاسخی با فرمتی که در درخواست مشخص شده ارائه کند و در نتیجه پاسخ 406 را برمیگرداند.
در ارتباط میان مرورگر و سرور، اطلاعات مختلفی همراه درخواست ارسال میشود. برای مثال مرورگر میتواند از طریق Headerهایی مانند Accept، Accept-Encoding و Accept-Language مشخص کند که چه نوع محتوایی را میتواند دریافت کند. اگر سرور نتواند پاسخی مطابق با این شرایط تولید کند و امکان ارائه یک پاسخ جایگزین نیز وجود نداشته باشد، ممکن است کد 406 نمایش داده شود.
البته در دنیای واقعی، علت مشاهده این خطا همیشه همان مفهوم تئوری Content Negotiation نیست. بهخصوص در سایتهای وردپرسی، یکی از سناریوهای مهم این است که سیستمهای امنیتی سرور، یک درخواست معمولی را اشتباه تشخیص داده و آن را مسدود کنند.
به همین دلیل، وقتی یک سایت با ارور 406 مواجه میشود، باید هم تنظیمات خود سایت و هم تنظیمات سرور بررسی شوند.
ارور 406 چه تفاوتی با خطاهای 404 و 500 دارد؟
برای درک بهتر 406، بهتر است آن را با چند خطای رایج دیگر مقایسه کنیم.
خطای 404 Not Found معمولاً به این معناست که صفحه یا منبعی که درخواست کردهاید پیدا نشده است. برای مثال ممکن است آدرس یک صفحه را اشتباه وارد کرده باشید یا صفحه موردنظر حذف شده باشد.
در مقابل، خطای 500 Internal Server Error بیشتر به یک مشکل داخلی در سمت سرور مربوط میشود. برای مثال خطای PHP، تنظیمات نادرست سرور یا مشکل در اجرای کد سایت میتواند باعث ایجاد خطای 500 شود.
اما در خطای 406 Not Acceptable، سرور درخواست را دریافت کرده ولی نمیتواند پاسخ را با شرایط مورد انتظار ارائه کند یا یک لایه امنیتی سرور درخواست را نامعتبر یا خطرناک تشخیص داده است.
بنابراین تشخیص صحیح نوع خطا اهمیت زیادی دارد؛ زیرا راهکار رفع 404، 500 و 406 کاملاً یکسان نیست.
چرا ارور 406 ایجاد میشود؟
دلایل مختلفی میتوانند باعث ایجاد خطای 406 شوند. در ادامه مهمترین آنها را بررسی میکنیم.
1. تنظیمات Content Negotiation
یکی از دلایل اصلی و استاندارد ایجاد 406، مربوط به مذاکره محتوا بین مرورگر و سرور است.
فرض کنید مرورگر در Header درخواست اعلام کند که نوع خاصی از محتوا را میپذیرد، اما سرور قادر نباشد همان نوع محتوا را ارائه کند. در چنین شرایطی، سرور ممکن است به جای ارائه محتوای پیشفرض، پاسخ 406 ارسال کند.
برای مثال یک درخواست میتواند نوع خاصی از Content-Type را انتظار داشته باشد، در حالی که سرور تنها امکان ارائه فرمتهای دیگری را دارد.
البته این حالت در وبسایتهای معمولی چندان رایج نیست و بسیاری از سرورها ترجیح میدهند به جای نمایش 406، نسخه قابلاستفادهای از محتوا را به کاربر نمایش دهند.
2. فعال بودن ModSecurity
یکی از دلایل مهم ارور 406 در بسیاری از سایتها، مخصوصاً سایتهای وردپرسی، ModSecurity است.
ModSecurity یک لایه امنیتی برای وبسرور است که وظیفه دارد درخواستهای مشکوک را شناسایی و در صورت نیاز مسدود کند. این سیستم معمولاً از مجموعهای از قوانین امنیتی استفاده میکند تا حملاتی مانند SQL Injection، XSS و درخواستهای غیرعادی را شناسایی کند.
مشکل زمانی ایجاد میشود که یک درخواست کاملاً سالم، شبیه یک الگوی حمله به نظر برسد. در این حالت ModSecurity ممکن است درخواست را مسدود کند و در بعضی تنظیمات نتیجه آن نمایش خطای 406 باشد.
این موضوع در وردپرس نیز مشاهده شده است؛ برای نمونه در برخی درخواستهای AJAX، قوانین امنیتی ModSecurity میتوانند درخواست را به اشتباه مسدود کرده و پاسخ 406 ایجاد کنند.
3. افزونههای امنیتی وردپرس
اگر سایت شما با وردپرس ساخته شده است، افزونههای امنیتی نیز میتوانند در ایجاد چنین خطایی نقش داشته باشند.
افزونههایی که برای جلوگیری از حملات، محدود کردن درخواستها یا فیلتر کردن ورودیهای کاربر استفاده میشوند، ممکن است در بعضی شرایط یک درخواست معتبر را مشکوک تشخیص دهند.

به همین دلیل اگر خطای 406 تنها پس از نصب یا فعالسازی یک افزونه خاص ایجاد شده باشد، بررسی تنظیمات همان افزونه یکی از اولین اقدامات منطقی است.
4. درخواستهای غیرعادی یا پارامترهای URL
گاهی یک URL معمولی بدون مشکل باز میشود، اما زمانی که پارامتر خاصی به انتهای آدرس اضافه میکنیم، سرور خطای 406 نمایش میدهد.
این موضوع میتواند نشانهای از وجود یک قانون امنیتی در سرور باشد. برخی سیستمهای امنیتی نسبت به کلمات، کاراکترها یا الگوهای خاص در Query String حساس هستند.
در چنین شرایطی ممکن است صفحه اصلی سایت کاملاً سالم باشد اما یک URL خاص، یک درخواست AJAX یا حتی یک فرم، با خطای 406 مواجه شود.
5. تنظیمات اشتباه سرور یا فایلهای پیکربندی
تنظیمات Apache، Nginx یا سایر اجزای سرور نیز میتواند در این موضوع مؤثر باشد.
برای مثال اگر قوانین خاصی در فایل .htaccess قرار گرفته باشند، ممکن است برخی درخواستها به شکل ناخواسته فیلتر شوند.
به همین دلیل حذف یا تغییر تصادفی قوانین .htaccess توصیه نمیشود؛ زیرا ممکن است مشکل جدیدی در Rewriteها، امنیت یا عملکرد سایت ایجاد شود.
چگونه بفهمیم علت ارور 406 چیست؟
اولین قدم این است که مشخص کنیم خطا دقیقاً در چه شرایطی اتفاق میافتد.
اگر فقط یک صفحه خاص با 406 مواجه میشود، URL آن صفحه را بررسی کنید.
اگر تمام صفحات سایت خطای 406 دارند، احتمال مشکل در تنظیمات کلی سرور یا سیستم امنیتی بیشتر میشود.
همچنین بررسی کنید آیا خطا فقط برای شما اتفاق میافتد یا کاربران دیگر نیز آن را مشاهده میکنند. گاهی پاک کردن Cache مرورگر، تست در حالت Incognito یا بررسی سایت با یک اینترنت دیگر میتواند مشخص کند مشکل مربوط به محیط کاربر است یا سرور.
در مرحله بعد، لاگهای سرور اهمیت زیادی پیدا میکنند. اگر ModSecurity فعال باشد، معمولاً در Audit Log میتوان مشاهده کرد کدام Rule باعث مسدود شدن درخواست شده است.
این اطلاعات بسیار ارزشمند هستند، زیرا به جای حدس زدن، دقیقاً مشخص میکنند سرور به چه دلیل درخواست را رد کرده است.
روشهای رفع ارور 406
روش رفع خطای 406 به علت آن بستگی دارد و نمیتوان یک راهکار واحد برای تمام سایتها ارائه کرد.
بررسی تنظیمات ModSecurity
اگر مشخص شود ModSecurity باعث ایجاد خطا شده است، باید Rule مربوطه شناسایی شود. در بعضی موارد لازم است قانون خاصی برای یک URL یا درخواست استثنا شود.
البته خاموش کردن کامل ModSecurity معمولاً بهترین راهکار نیست؛ زیرا این سیستم نقش مهمی در امنیت سرور دارد.
راهکار اصولی این است که علت Block شدن درخواست مشخص شود و فقط همان مورد اصلاح یا استثنا شود.
بررسی افزونههای وردپرس
اگر خطا در وردپرس اتفاق میافتد، افزونههای امنیتی، Cache، Firewall و حتی برخی افزونههایی که درخواستهای AJAX ارسال میکنند باید بررسی شوند.
گاهی غیرفعال کردن موقت افزونهها در محیط تست میتواند به شناسایی عامل ایجاد خطا کمک کند.
اگر مشخص شد یک افزونه خاص باعث مشکل شده است، بهتر است تنظیمات آن بررسی و در صورت وجود نسخه جدید، افزونه بهروزرسانی شود.
بررسی فایل .htaccess
در سرورهای Apache، فایل .htaccess میتواند روی نحوه پردازش درخواستها تأثیر بگذارد.
اگر اخیراً تغییراتی در این فایل ایجاد شده و بعد از آن ارور 406 ظاهر شده است، بررسی تغییرات اخیر میتواند مسیر عیبیابی را مشخص کند.
با این حال، بهتر است قبل از هر تغییری از فایل فعلی نسخه پشتیبان تهیه شود.
بررسی Headerهای درخواست
در موارد تخصصیتر باید Headerهای HTTP نیز بررسی شوند.
مواردی مانند Accept، Accept-Encoding و Accept-Language میتوانند در رفتار سرور مؤثر باشند. طبق استاندارد HTTP، کد 406 زمانی استفاده میشود که سرور نتواند نمایش یا Representation مناسبی مطابق با شرایط اعلامشده در درخواست ارائه کند.
برای بررسی این موارد میتوان از ابزارهای Developer Tools مرورگر یا ابزارهای تخصصی تست HTTP استفاده کرد.
آیا ارور 406 برای سئو سایت خطرناک است؟
خود کد 406 بهتنهایی به معنی جریمه شدن سایت توسط گوگل نیست، اما اگر به شکل گسترده و مداوم اتفاق بیفتد، میتواند از نظر فنی مشکلساز شود.
فرض کنید صفحات مهم سایت برای کاربران یا رباتهای موتور جستوجو با خطای 406 پاسخ داده شوند. در این حالت دسترسی به محتوای صفحه مختل میشود و طبیعتاً چنین وضعیتی برای یک سایت تجاری یا محتوایی مطلوب نیست.

به همین دلیل در سئو تکنیکال، علاوه بر بررسی وضعیتهایی مانند 404 و 500، بهتر است سایر پاسخهای HTTP غیرطبیعی نیز بررسی شوند.
مهمتر از خود عدد 406، این است که بدانیم کدام URL، برای چه کاربری و تحت چه شرایطی این پاسخ را دریافت میکند.
آیا طراحی صحیح سایت میتواند از بروز چنین مشکلاتی جلوگیری کند؟
طراحی سایت فقط به ظاهر صفحات، رنگبندی و رابط کاربری محدود نمیشود. ساختار فنی، نحوه پیادهسازی درخواستها، سازگاری افزونهها، امنیت، سرعت و سئو تکنیکال نیز بخش مهمی از یک وبسایت حرفهای هستند.
به همین دلیل هنگام انتخاب یک مجموعه برای طراحی سایت، بهتر است فقط قیمت یا ظاهر نمونهکارها را بررسی نکنیم و درباره پشتیبانی، امنیت، بهینهسازی فنی و قابلیت توسعه سایت نیز سؤال کنیم.
برای مثال، آراویژن در حوزه طراحی سایت، سئو و خدمات دیجیتال مارکتینگ فعالیت میکند و در طراحی سایت، موضوعاتی مانند سئو اولیه، ساختار فنی و ریسپانسیو بودن سایت را نیز در نظر میگیرد. در صفحه خدمات طراحی سایت در ارومیه این مجموعه نیز جزئیات پکیجها، نمونهکارها و امکانات مختلف طراحی سایت ارائه شده است.
طبق اطلاعات منتشرشده در این صفحه، سایتهای طراحیشده توسط آراویژن علاوه بر طراحی رابط کاربری و نسخه ریسپانسیو، با سئو اولیه و ملاحظات فنی نیز ارائه میشوند.
جمعبندی؛ ارور 406 را چگونه برطرف کنیم؟
ارور 406 Not Acceptable در سادهترین تعریف، یعنی سرور نتوانسته پاسخی مطابق با شرایط درخواست ارائه کند. این خطا میتواند به دلیل Content Negotiation، Headerهای HTTP، تنظیمات سرور، ModSecurity، افزونههای امنیتی وردپرس یا قوانین موجود در فایلهای پیکربندی ایجاد شود.
اگر با این خطا مواجه شدید، بهتر است به جای تغییرات عجولانه، ابتدا مشخص کنید مشکل دقیقاً از کجاست. بررسی URL مشکلدار، تست با مرورگر و اینترنت دیگر، بررسی افزونههای وردپرس، مشاهده لاگهای سرور و بررسی ModSecurity از مهمترین مراحل عیبیابی هستند.
در سایتهای حرفهای نیز پیشگیری اهمیت زیادی دارد. انتخاب هاست مناسب، پیکربندی صحیح سرور، استفاده از افزونههای معتبر، بهروزرسانی منظم وردپرس و توجه به سئو تکنیکال میتواند بسیاری از مشکلات فنی را کاهش دهد.
در نهایت باید توجه داشت که هر خطای 406 الزاماً یک مشکل ساده در وردپرس نیست. گاهی ریشه مشکل در لایه امنیتی سرور قرار دارد و برای شناسایی آن باید لاگهای سرور و قوانین Firewall بررسی شوند. بنابراین اگر با وجود بررسی تنظیمات سایت همچنان این خطا ادامه داشت، بهتر است موضوع توسط یک متخصص سرور یا تیم فنی بررسی شود تا بدون کاهش امنیت سایت، عامل اصلی Block شدن درخواست شناسایی و برطرف شود.
