405 Method Not Allowed
Penggunaan
Ketika error 405 Method Not Allowed datang, klien memahami bahwa sumber daya tersebut ada, tetapi metode yang ditentukan tidak diizinkan. Sebagai bagian dari respons, server mengirimkan header Allow yang mencantumkan metode-metode yang saat ini didukung untuk sumber daya tersebut.
Dampak SEO
Mesin pencari seperti Google tidak mengindeks URL yang mengembalikan status 405. URL yang sebelumnya terindeks dan mengembalikan status code ini akan dihapus dari hasil pencarian.
Contoh
Klien mencoba melakukan DELETE pada sumber daya yang hanya-baca. Server merespons dengan 405 Method Not Allowed dan menyertakan header Allow yang menunjukkan bahwa hanya GET, HEAD, dan OPTIONS yang diizinkan.
Permintaan
DELETE /policies.pdf HTTP/1.1
Host: example.com
Respons
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS
Content-Type: text/html
Content-Length: 157
<html>
<head>
<title>Operation Not Permitted</title>
</head>
<body>
<p>This resource is read-only and cannot be
deleted.</p>
</body>
</html>
Cara memperbaiki
405 Method Not Allowed berarti sumber daya tersebut ada, tetapi tidak mendukung metode HTTP yang ada pada permintaan.
Periksa header Allow pada respons. Server menyertakan header ini untuk mencantumkan setiap metode yang diizinkan bagi sumber daya tersebut. Beralihlah ke salah satu metode yang tercantum. Periksa header tersebut dengan curl -I
Beralih ke metode yang benar. Kesalahan yang umum adalah mengirim POST ke endpoint hanya-baca atau GET ke endpoint pengiriman data. Sesuaikan metode dengan operasi yang dijelaskan pada dokumentasi API. Pengiriman form secara bawaan menggunakan GET kecuali atribut method disetel ke post.
Verifikasi dokumentasi endpoint API. REST API mendefinisikan metode spesifik untuk setiap path sumber daya. Pastikan kombinasi path dan metode tersebut valid. Ketidakcocokan trailing slash antara /api/users dan /api/users/ dirutekan ke handler yang berbeda pada banyak framework, dan salah satu path menerima metode tersebut sementara yang lain tidak.
Periksa konfigurasi server untuk pembatasan metode. Direktif web server membatasi metode yang diizinkan per location. Di Apache, blok
<LimitExcept GET HEAD OPTIONS>
Require all denied
</LimitExcept>
Di nginx, direktif limit_except memberikan hasil yang sama:
location /api {
limit_except GET POST {
deny all;
}
}
Sesuaikan direktif tersebut agar mengizinkan metode yang dimaksud.
Tangani permintaan preflight CORS. Permintaan lintas asal memicu preflight OPTIONS sebelum metode yang sebenarnya dikirim. Server harus merespons OPTIONS dengan header Access-Control-Allow-Methods yang benar dan mencantumkan metode yang diizinkan. Konfigurasi CORS yang hilang atau tidak lengkap mengembalikan 405 untuk preflight tersebut. Di nginx:
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
Tinjau routing framework aplikasi. Framework web (Django, Rails, Express, Spring) hanya mendaftarkan route untuk metode yang dideklarasikan secara eksplisit. Decorator route atau aksi controller yang hilang untuk metode yang diminta akan menghasilkan 405. Pastikan definisi route cocok dengan metode HTTP yang dimaksud.
Periksa kemungkinan gangguan dari server file statis. nginx secara bawaan melayani file statis dan menolak permintaan POST ke sumber daya statis. Ketika POST ditujukan untuk backend aplikasi, pastikan blok location merutekan permintaan tersebut ke aplikasi upstream alih-alih ke handler file statis.
Referensi kode
.NET
HttpStatusCode.MethodNotAllowed
Rust
http::StatusCode::METHOD_NOT_ALLOWED
Rails
:method_not_allowed
Go
http.StatusMethodNotAllowed
Symfony
Response::HTTP_METHOD_NOT_ALLOWED
Python3.5+
http.HTTPStatus.METHOD_NOT_ALLOWED
Java
java.net.HttpURLConnection.HTTP_BAD_METHOD
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_METHOD_NOT_ALLOWED
Angular
@angular/common/http/HttpStatusCode.MethodNotAllowed