501 Not Implemented
Penggunaan
Status code 501 Not Implemented berarti server tidak mampu memenuhi permintaan karena keterbatasan di sisi server. Status ini mirip dengan status code 405 Method Not Allowed, meskipun 405 secara khusus berarti metode yang diminta dikenali tetapi tidak diizinkan untuk sumber daya target.
Status code 405 Method Not Allowed berarti server mengenali metode tersebut tetapi tidak mengizinkannya untuk sumber daya target. Status code 501 Not Implemented berarti server tidak mengenali metode tersebut atau tidak memiliki kemampuan untuk mendukung metode tersebut pada sumber daya mana pun. Ini merupakan kondisi permanen di tingkat server.
Status ini tepat digunakan ketika server tidak mengenali metode permintaan sehingga tidak mampu mendukung permintaan tersebut untuk sumber daya mana pun.
Dampak SEO
Mesin pencari seperti Google tidak mengindeks URL yang mengembalikan status 501 Not Implemented. URL yang sebelumnya terindeks namun kini mengembalikan status code ini akan dihapus dari hasil pencarian.
Beberapa API memperluas makna 501 melampaui metode yang tidak tersedia. API Shopify mengembalikan 501 Not Implemented ketika endpoint yang diminta tidak tersedia pada paket langganan toko saat ini, misalnya fitur yang dibatasi hanya untuk Shopify Plus. Endpoint tersebut ada pada permukaan API, tetapi dibatasi oleh tingkat langganan.
Contoh
Klien meminta sebuah sumber daya dan server merespons dengan status code 501 Not Implemented karena metode permintaan dikenali tetapi belum didukung.
Permintaan
POST /requests?id=111&flag=start HTTP/1.1
Host: example.com
Response
HTTP/1.1 501 Not Implemented
Content-Type: text/html; charset=UTF-8
Content-Length: 148
<html>
<head>
<title>Function Not Implemented</title>
</head>
<body>
<p>This functionality is under development.</p>
</body>
</html>
Cara memperbaiki
Pastikan metode HTTP pada permintaan sudah benar. Sebuah PATCH yang dikirim ke server yang hanya mengharapkan GET dan POST akan memicu 501 apabila server sama sekali tidak memiliki handler untuk metode tersebut.
Penyebab umum beserta cara mengatasinya:
Metode tidak didukung pada server. Pada Apache, direktif Limit dan LimitExcept mengendalikan metode yang diizinkan. Pada nginx, penyaringan metode dilakukan di dalam blok location. Pastikan metode yang dikirim klien tidak dikecualikan oleh konfigurasi.
Modul server tidak terpasang. Apache membutuhkan mod_dav untuk metode WebDAV seperti PROPFIND dan MKCOL. IIS membutuhkan WebDAV Publishing beserta pemetaan handler yang benar. Aktifkan modul tersebut lalu mulai ulang layanannya.
Reverse proxy menghapus atau menulis ulang metode. Sebagian proxy mengubah metode non-standar menjadi GET. Pada nginx, pastikan proxy_method tidak disetel kecuali memang disengaja. Pada AWS ALB, pastikan target group mendukung metode HTTP yang dibutuhkan.
Perangkat lunak server yang usang. Build web server lama tidak mendukung metode yang distandardisasi setelah rilisnya. Perbarui Apache, nginx, atau IIS ke versi stabil terkini.
Pemblokiran oleh firewall atau WAF. Web application firewall dan plugin keamanan terkadang menolak metode seperti PUT, DELETE, atau OPTIONS. Tinjau aturan WAF dan masukkan metode yang dibutuhkan ke daftar izin untuk endpoint tersebut.
Fitur API dibatasi oleh tingkat paket langganan. Platform seperti Shopify mengembalikan 501 ketika sebuah endpoint ada tetapi tidak tersedia untuk tingkat langganan toko. Periksa persyaratan paket untuk fitur tersebut dalam dokumentasi API dan lakukan upgrade bila diperlukan.
Di sisi klien, pastikan URL permintaan sudah benar. Salah ketik yang mengarahkan trafik ke server atau endpoint yang keliru akan mengembalikan 501 ketika server penerima tidak memiliki implementasi untuk metode tersebut.
Referensi kode
.NET
HttpStatusCode.NotImplemented
Rust
http::StatusCode::NOT_IMPLEMENTED
Rails
:not_implemented
Go
http.StatusNotImplemented
Symfony
Response::HTTP_NOT_IMPLEMENTED
Python3.5+
http.HTTPStatus.NOT_IMPLEMENTED
Java
java.net.HttpURLConnection.HTTP_NOT_IMPLEMENTED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_NOT_IMPLEMENTED
Angular
@angular/common/http/HttpStatusCode.NotImplemented