مدیریت خطای HTTP 413 Payload Too Large

handling http status 413 payload too large
20 آبان 1403

خب، بگذارید یادتان بدهم که وقتی ارور HTTP 413 که می‌گوید "Payload Too Large" رخ می‌دهد، چه اتفاقی می‌افتد و چطور می‌توانیم آن را مدیریت کنیم. این ارور زمانی پیش می‌آید که حجمی که می‌خواهید به سرور ارسال کنید از حد مجاز بیشتر است. مثلا، موقعی که دارید فایل بزرگی را آپلود می‌کنید و حجم این فایل از محدوده‌ای که سرور تنظیم کرده است، بیشتر است. عجیب نیست که بخواهید بدانید چطور باید با این قضیه برخورد کنید.

در واقع، این محدودیت سایز ممکن است به تنظیمات سرور یا تنظیمات اپلیکیشن وب بازگردد. اگه برنامه‌تون رو روی سروری مثل Nginx یا Apache میزبانی می‌کنید، باید فایل‌های تنظیمات مربوطه رو بررسی کنید. در تنظیمات اپلیکیشن هم ممکنه محدودیتی برای حجم داده‌ها تعریف شده باشه. در هر صورت، بهتره اول مطمئن بشید که با مشکل عملکردی در طرف کلاینت روبرو نیستید.

یکی از راه حل‌ها اینه که برای رفع این محدودیت، تنظیمات مربوط به سایز مجاز دیتا رو تغییر بدید. اما این به معنی این نیست که بی‌محابا به بارگذاری فایل‌های بزرگ بپردازید. بهتره کمی محتاط باشید و حجم رو به اندازه معقولی افزایش بدید. مثلا اگه دارید از Nginx استفاده می‌کنید، می‌تونید با تغییر مقدار client_max_body_size این کار رو انجام بدید.

اگه در حال استفاده از Node.js هستید، شاید بخواهید ماژول مورد استفاده‌تون برای مدیریت درخواست‌ها رو دوباره بررسی کنید. مثلا در express می‌تونید با تغییر تنظیمات body-parser این مسئله رو حل کنید. توجه داشته باشید که تغییر دادن این تنظیمات ممکنه پیامدهای امنیتی داشته باشه و باید با احتیاط بیشتری عمل کنید.

حال بیایید نگاهی به تغییرات ممکن در تنطیمات سرور و اپلیکیشن بیندازیم.

# Example change in Nginx configuration
server {
...
client_max_body_size 10M;
...
}

# Example change in Apache configuration
<IfModule mod_php7.c>
php_value upload_max_filesize 10M
php_value post_max_size 12M
</IfModule>

// Example change in Node.js with Express
const express = require('express');
const app = express();

app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true, limit: '10mb' }));

توضیح کدها

# Example change in Nginx configuration
در این کد، ما حجم مجاز داده‌های ورودی به Nginx را به 10 مگابایت تغییر دادیم.

server {...}
این بلوک مربوط به فایل پیکربندی Nginx است و ما پارامتر client_max_body_size را تنظیم کردیم.

client_max_body_size 10M;
با این خط، ما محدودیت حجم داده‌های ارسالی به 10 مگابایت تغییر دادیم.

<IfModule mod_php7.c>
در این قسمت، تنظیمات مربوط به آپاچی برای تغییر حجم مجاز آپلود و پس از آن آمده است.

php_value upload_max_filesize 10M
حجم آپلود مجاز فایل‌ها در php را به 10 مگابایت تنظیم می‌کند.

php_value post_max_size 12M
حجم مجاز داده‌های ارسالی در یک POST را به 12 مگابایت تنظیم می‌کند.

const express = require('express');
با استفاده از این خط، فریمورک Express.js را در نودجی‌اس برای مدیریت درخواست‌ها وارد کردیم.

app.use(express.json({ limit: '10mb' }));
مقدار مجاز JSON data که می‌تواند در درخواست‌ها ارسال شود را به 10 مگابایت محدود کردیم.

app.use(express.urlencoded({ extended: true, limit: '10mb' }));
دیتاهایی که از طریق فرم‌ها ارسال می‌شوند را به 10 مگابایت محدود کردیم.

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

؟

چرا خطای HTTP 413 رخ می‌دهد؟

؟

چگونه می‌توانم این خطا را رفع کنم؟

؟

آیا افزایش حجم مجاز خطراتی دارد؟