413 Content Too Large
Penggunaan
Ketika pesan error 413 Content Too Large diterima, berarti klien mengirimkan body permintaan yang terlalu besar bagi server. Contoh yang umum adalah ketika klien mencoba mengirim berkas dengan tipe dan format yang dapat diterima, tetapi ukuran berkas itu melampaui batas. Gambar, misalnya, sering kali beresolusi tinggi secara tidak perlu dan dapat dibuat jauh lebih kecil tanpa memengaruhi tujuan penggunaannya. Alih-alih memikul tanggung jawab untuk memodifikasi berkas gambar tersebut, server menolak transfer itu dan mengandalkan klien untuk melakukan pemrosesan yang diperlukan.
Dalam situasi seperti ini, klien memeriksa terlebih dahulu apakah ukuran berkas diizinkan sebelum memulai PUT, yaitu dengan menggunakan header Expect: 100-continue. Server akan memberikan konfirmasi dan, sebagai tanggapannya, body pesan dikirim atau ditahan.
Server secara opsional mengirimkan header Retry-After dalam responsnya. Jika ada, klien mencoba permintaan itu lagi setelah periode tertentu atau pada waktu dan tanggal tertentu. Misalnya, jika klien telah melampaui kuota unggah untuk minggu itu, atau unggahan besar tidak diizinkan pada jam sibuk, server akan menyarankan agar mencoba lagi pada waktu yang lebih tepat.
Jika situasi ini terjadi karena server kehabisan ruang penyimpanan, server mengirimkan 507 sebagai gantinya.
Server menyertakan header Connection: close untuk mengakhiri koneksi, sehingga mencegah klien mengirimkan body pesan.
Catatan
WAF dan firewall CDN (Cloudflare, AWS WAF) menerapkan batas ukuran body secara independen dari server origin. Periksa log WAF/firewall jika batas pada server origin lebih tinggi daripada payload. Opsi untuk memperkecil ukuran payload: kompresi dengan Content-Encoding: gzip, terapkan pagination untuk kumpulan hasil yang besar, serta gunakan unggahan multipart atau resumable untuk berkas berukuran besar.
Dampak SEO
Mesin pencari seperti Google tidak akan mengindeks URL dengan status respons 413. URL yang sebelumnya terindeks akan dihapus dari hasil pencarian.
Contoh
Klien mencoba mengirim sebuah berkas dan server merespons dengan 413 Content Too Large karena lalu lintas sedang padat saat itu. Server menolak permintaan tersebut, menutup koneksi, dan menyarankan klien mencoba lagi setelah 30 menit.
Permintaan
PUT /docs HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 10000
Respons
HTTP/1.1 413 Content Too Large
Retry-After: 1800
Connection: close
Content-Type: text/html
Content-Length: 188
<html>
<head>
<title>File Too Large</title>
</head>
<body>
<p>Too much server traffic to accept the transfer
at this time. Try again after 30 minutes.</p>
</body>
</html>
Cara memperbaiki
Error ini berasal dari lapisan mana pun dalam tumpukan teknologi yang lebih dulu menerapkan batas ukuran: web server, reverse proxy, CDN, atau framework aplikasi. Identifikasi lapisan yang mengembalikan 413 dan sesuaikan batasnya di sana.
nginx: Setel client_max_body_size di blok http, server, atau location. Nilai 0 menonaktifkan pemeriksaan tersebut sepenuhnya (tidak disarankan di lingkungan produksi). Mulai ulang nginx setelah mengubah nilai itu.
Apache: Setel LimitRequestBody di httpd.conf atau .htaccess. Nilainya dalam satuan byte, jadi 10 MB adalah 10485760. Muat ulang Apache agar perubahan berlaku.
IIS: Ubah atribut maxAllowedContentLength di berkas web.config pada system.webServer > security > requestFiltering > requestLimits.
PHP: Sesuaikan upload_max_filesize sekaligus post_max_size di php.ini. Nilai post_max_size harus sama dengan atau lebih besar daripada upload_max_filesize.
Node.js / Express: Setel opsi limit pada body-parser atau pada middleware JSON/URL-encoded bawaan Express, misalnya express.json({ limit: ‘50mb’ }).
Cloudflare: Paket Free dan Pro membatasi unggahan hingga 100 MB, Business 200 MB, dan Enterprise 500 MB. Unggahan yang melampaui batas-batas ini mengembalikan 413 sebelum mencapai origin. Untuk unggahan berkas besar di belakang Cloudflare, lewati proxy tersebut atau gunakan strategi unggahan terpotong (chunked).
Di sisi klien, kompresi atau potong payload besar menjadi beberapa bagian sebelum mengirimkannya. Untuk unggahan berkas, terapkan protokol unggahan multipart atau resumable agar tetap berada dalam batas server. Gunakan mekanisme Expect: 100-continue untuk memeriksa apakah server akan menerima ukuran payload tersebut sebelum mengirimkan seluruh body.
Referensi kode
.NET
HttpStatusCode.RequestEntityTooLarge
Rust
http::StatusCode::PAYLOAD_TOO_LARGE
Rails
:payload_too_large
:request_entity_too_large
Go
http.StatusRequestEntityTooLarge
Symfony
Response::HTTP_REQUEST_ENTITY_TOO_LARGE
Python3.5+
http.HTTPStatus.REQUEST_ENTITY_TOO_LARGE
Java
java.net.HttpURLConnection.HTTP_ENTITY_TOO_LARGE
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_REQUEST_TOO_LONG
Angular
@angular/common/http/HttpStatusCode.PayloadTooLarge