400 Bad Request
Penggunaan
Ketika galat 400 Bad Request tiba, klien bertanggung jawab memeriksa badan pesan untuk mengetahui lebih lanjut tentang kegagalan tersebut. Server mengembalikan detail yang memadai agar klien dapat memperbaiki masalahnya. Alasan umum munculnya respons 400 Bad Request mencakup:
Ketika galat-galat ini terjadi, klien dapat mencoba memeriksa ulang URL, membersihkan Cookie browser, atau mengompresi berkas yang berukuran terlalu besar sebelum mengirimkannya kembali.
Catatan
Galat 400 merupakan galat klien (permintaannya cacat), sedangkan galat 500 merupakan kegagalan server (server bermasalah saat memproses permintaan yang valid). Galat 400 bukanlah hal yang bersifat sementara. Mengulangi permintaan yang sama akan menghasilkan galat yang sama. Klien harus memperbaiki permintaannya sebelum mencoba lagi. Ekstensi browser atau adware yang menyisipkan header cacat adalah penyebab umum galat 400 yang tidak terduga. Menonaktifkan ekstensi membantu mendiagnosis masalah ini.
Dampak SEO
Mesin pencari seperti Google tidak mengindeks URL yang mengembalikan status 400. URL yang sebelumnya terindeks namun kini mengembalikan kode status ini akan dihapus dari hasil pencarian. Halaman yang mengembalikan kode ini tidak memboroskan anggaran perayapan.
Contoh
Klien meminta sebuah sumber daya yang path-nya mengandung karakter kurung kurawal. Karakter tersebut tidak valid dalam URL, sehingga server merespons dengan 400 Bad Request.
Permintaan
GET /index{15}.html HTTP/1.1
Host: example.com
Respons
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=UTF-8
Content-Length: 131
<html>
<head>
<title>Malformed URL</title>
</head>
<body>
<p>Invalid characters in HTTP request</p>
</body>
</html>
Cara memperbaiki
Galat 400 Bad Request berarti server menolak permintaan karena adanya masalah format di sisi klien.
Periksa URL untuk menemukan galat encoding. Karakter khusus seperti kurung kurawal, spasi, atau karakter non-ASCII memerlukan percent-encoding. Periksa seluruh path permintaan dan query string. Jalankan URL melalui validator untuk menangkap urutan byte yang ilegal.
Validasi header permintaan. Header Host yang cacat, header Cookie yang terlalu besar, atau header wajib yang hilang akan memicu galat ini. Bandingkan header dengan spesifikasi API. Gunakan DevTools browser (tab Network) atau curl -v untuk memeriksa header mentah yang dikirim bersama permintaan.
Periksa badan permintaan untuk menemukan galat sintaks. JSON yang tidak valid, encoding formulir yang rusak, atau ketidakcocokan antara header Content-Type dan format badan pesan sebenarnya menyebabkan penolakan. Validasi payload JSON dengan linter sebelum mengirimkannya.
Bersihkan cache dan Cookie browser. Cookie yang rusak atau kedaluwarsa menghasilkan header permintaan yang cacat. Nilai cookie berukuran besar yang melampaui batas buffer server merupakan pemicu yang sering terjadi. Bersihkan data tersimpan lalu coba lagi.
Pastikan Content-Length sesuai dengan ukuran badan pesan yang sebenarnya. Ketidakcocokan antara jumlah byte yang dideklarasikan dan yang dikirimkan menghasilkan respons bad request.
Periksa batas ukuran di sisi server. nginx menolak header yang terlalu besar dengan 400 ketika header tersebut melampaui buffer yang dikonfigurasi oleh large_client_header_buffers (bawaan: 4 buffer berukuran 8 KB). Naikkan nilainya di nginx.conf:
large_client_header_buffers 4 16k;
Apache menerapkan LimitRequestFieldSize (bawaan 8190 byte) dan LimitRequestLine. Naikkan nilai-nilai ini pada konfigurasi server atau virtual host:
LimitRequestFieldSize 16384
LimitRequestLine 16384
Aktifkan logging debug untuk mengidentifikasi penyebab persisnya. nginx mencatat alasan penolakan pada level info. Atur error_log ke info dan tinjau /var/log/nginx/error.log. Apache mencatat nama header bermasalah di log galat pada LogLevel info.
Periksa penerusan header pada reverse proxy. Ketika nginx atau Apache beroperasi sebagai reverse proxy, header Host, X-Forwarded-For, atau X-Real-IP yang salah diatur menyebabkan backend menolak permintaan. Pastikan direktif proxy_set_header meneruskan nilai yang valid.
Referensi kode
.NET
HttpStatusCode.BadRequest
Rust
http::StatusCode::BAD_REQUEST
Rails
:bad_request
Go
http.StatusBadRequest
Symfony
Response::HTTP_BAD_REQUEST
Python3.5+
http.HTTPStatus.BAD_REQUEST
Java
java.net.HttpURLConnection.HTTP_BAD_REQUEST
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_BAD_REQUEST
Angular
@angular/common/http/HttpStatusCode.BadRequest