HTTP 405 Method Not Allowed
Doğru adres, yanlış fiil: kaynak var ama bu HTTP yöntemini kabul etmiyor.
HTTP 405 ne anlama gelir
HTTP 405 Method Not Allowed, sunucunun URL'yi tanıdığı ama HTTP yönteminin — GET, POST, PUT, DELETE — bunun için desteklenmediği anlamına gelir. Yanıt, desteklenen yöntemleri listeleyen bir Allow başlığı içermelidir.
Neredeyse her zaman istemci ve API arasında bir uyumsuzluktur: bir sayfa rotasına POST yapan bir form, API'nin PATCH beklediği yerde PUT gönderen bir betik, ya da yanlış yöntemle yapılandırılmış bir webhook.
405 hatalarının yaygın nedenleri
- Yalnızca GET'i işleyen bir uç noktaya gönderilen POST (ya da tersi) — API örneklerini kopyala-yapıştırdıktan sonra tipik bir durum.
- Bir yönlendirme (301/302), istek uç noktaya ulaşmadan önce bir POST'u GET'e dönüştürdü.
- Web sunucusu uygulama bunları beklerken PUT/DELETE gibi yöntemleri genel olarak engelliyor.
- Yanlış bir rota: amaçlanan uç nokta /api/items (POST), ama istek /items'e ulaştı.
Bir geliştirici olarak nasıl düzeltilir
- Allow yanıt başlığını okuyun — URL'nin tam olarak hangi yöntemleri kabul ettiğini listeler.
- Doğru yöntem ve yol çifti için API belgelerini kontrol edin.
- Yolda bir yönlendirme varsa, yöntemin sıçramayı atlatması için 307/308 kullanın.
- Sunucuda, çerçevenin (framework) rotanın yöntemi bildirdiğinden ve hiçbir proxy'nin bunu kaldırmadığından emin olun.
Örnek yanıt
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
Content-Type: application/json
{"error":"method_not_allowed"}SSS
Bir URL'nin hangi yöntemleri desteklediğini nasıl görebilirim?
405 yanıtındaki Allow başlığını kontrol edin veya URL'ye bir OPTIONS isteği gönderin.
POST isteğim neden GET'e dönüştü?
Aradaki bir 301 veya 302 yönlendirmesi, istemcinin yöntem değiştirmesine izin verdi. POST kabul eden uç noktalar için 307/308 yönlendirmeleri kullanın.
405 bir istemci sorunu mu yoksa sunucu sorunu mu?
Biçimsel olarak bir istemci hatasıdır, ama genellikle bir sunucu yanlış yapılandırmasını ortaya çıkarır — bir yöntemi eksik bir rota veya fiilleri (verb) engelleyen bir proxy.