Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 7 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

HTTP 405 hatası nedir?​


HTTP 405, istemcinin gönderdiği HTTP yönteminin (method) sunucunun tanıdığı bir yöntem olmasına rağmen ilgili hedef kaynak için desteklenmediği anlamına gelir. Sunucunun yöntemi hiç tanımaması 501 gibi farklı bir durumdur. Örneğin bir uç nokta yalnızca GET kabul ederken tarayıcı, form, JavaScript kodu ya da API istemcisi POST gönderirse sunucu 405 Method Not Allowed yanıtı verebilir. Bu hata genellikle URL'nin var olduğunu, ancak kullanılan eylemin o kaynak için uygun olmadığını gösterir.

Standarda göre origin sunucusu 405 yanıtında, hedef kaynağın desteklediği yöntemleri belirten Allow başlığını üretmelidir. Örneğin Allow: GET, HEAD görülüyorsa aynı adres için POST isteği reddediliyor olabilir. Ancak bu başlığın her sunucuda doğru veya eksiksiz yapılandırılmış olması garanti değildir.

Hata nasıl çalışır?​


HTTP yöntemi, istemcinin kaynak üzerinde ne yapmak istediğini belirtir:

  • GET: Kaynağı okumak veya listelemek için kullanılır.
  • POST: Veri göndermek, işlem başlatmak veya yeni bir kayıt oluşturmak için kullanılabilir.
  • PUT/PATCH: Bir kaynağı tamamen ya da kısmen güncellemek için kullanılabilir.
  • DELETE: Bir kaynağı silmek için kullanılabilir.
  • OPTIONS: Özellikle tarayıcıların ve CORS ön kontrol isteklerinin desteklenen yöntemleri öğrenmesi için kullanılır.

405, çoğunlukla 404 Not Found ile karıştırılır. 404 adresin bulunamadığını, 405 ise adresin tanındığını fakat gönderilen yöntemin o adres için uygun olmadığını anlatır. 403 Forbidden ise yöntem doğru olsa bile erişim izninin reddedilmesi durumudur; yine de hatalı sunucu veya uygulama yapılandırması bu kodların yanlış kullanılmasına yol açabilir.

Somut örnek​


Bir uygulamada /api/kullanicilar adresi listeleme için yalnızca GET kabul etsin. JavaScript kodu yeni kullanıcı oluşturmak için aynı adrese POST gönderdiğinde sunucu 405 döndürebilir. Bu durumda sorun çoğunlukla adresin kendisi değil, şu üç noktadan biridir:

  • İstemci yanlış HTTP yöntemi gönderiyordur.
  • Uygulamadaki rota POST için tanımlanmamıştır.
  • Ters vekil sunucu veya web sunucusu yöntemi uygulamaya iletmiyordur.

Yanıt başlıklarında Allow: GET, HEAD görülüyorsa istemci, API dokümantasyonuna göre GET kullanmalı veya uygulamada POST rotası ayrıca tanımlanmalıdır. Veri değiştiren bir işlemi yalnızca hatayı susturmak için GET isteğine çevirmek doğru çözüm değildir.

Teşhis ve düzeltme adımları​


Önce hatanın hangi istekte oluştuğunu kesinleştirin. Tarayıcı geliştirici araçlarında Network bölümünü açıp isteğin URL'sini, yöntemini, durum kodunu ve Allow başlığını kontrol edin. API istemcisi kullanıyorsanız aynı bilgileri istemci günlüklerinden alın.

  1. İsteğin yöntemini ve adresini karşılaştırın. Formun method değeri, JavaScript içindeki fetch veya Axios ayarı ve API dokümantasyonu aynı işlemi göstermelidir.
  2. Aynı isteği komut satırından gözlemleyin: curl -i -X POST https://example.com/hedef-yol. Bu biçimi yalnız kontrollü test ortamında, veri değiştirmeyeceğini bildiğiniz deneme rotasında kullanın; çalışan bir kayıt veya ödeme endpoint’ine rastgele POST göndermeyin.
  3. Yanıtta Allow başlığını ve sunucu uygulamasının hata gövdesini inceleyin. Desteklenen yöntem belirtiliyorsa istemciyi buna göre düzeltin.
  4. Rota uygulamada mevcut olduğu halde 405 sürüyorsa web sunucusu, ters vekil, yönlendirme kuralı veya WAF yapılandırmasında yöntemin engellenip engellenmediğini kontrol edin. İsteğin üst uygulamaya gerçekten ulaştığını uygulama günlükleriyle doğrulayın.
  5. Sorun tarayıcıdan gönderilen OPTIONS isteğinde oluşuyorsa CORS ön kontrol yanıtını ve sunucunun OPTIONS yöntemini doğru ele alıp almadığını inceleyin. Yalnızca güvenilen kaynaklar ve gerekli yöntemler için uygun CORS politikası tanımlayın.

Komutun beklenen sonucu, hedef rotanın gerçekten POST kabul etmediği bir durumda durum satırında 405 görülmesi ve standartta zorunlu olan Allow başlığının dönmesidir. Başlığın olmaması istemcinin yöntemi tahmin etmesi için gerekçe değil, eksik veya aracı katmanda değişmiş bir yanıt işaretidir. 404 alırsanız yol yanlış olabilir veya örnek rota mevcut değildir; 403 alırsanız erişim denetimini de incelemelisiniz. 2xx yanıtı alırsanız bu istek için 405 oluşmuyordur; tarayıcıdaki asıl isteğin yöntemi, başlıkları veya adresi farklı olabilir. curl tek başına tarayıcının CORS davranışını tam olarak taklit etmez; bu nedenle tarayıcı kaynaklı sorunları Network kaydıyla da doğrulayın.

BelirtiMuhtemel nedenİlk kontrol
GET çalışıyor, POST 405 dönüyorPOST rotası yok veya engelliUygulama rotası ve Allow başlığı
Tarayıcıda OPTIONS 405CORS ön kontrolü işlenmiyorOPTIONS yanıtı ve CORS politikası
Yalnız belirli URL’lerde 405Yönlendirme veya proxy kuralıSunucu ve ters vekil günlükleri
Kod değişikliği sonrası başladıRota yöntemi veya form ayarı değiştiSon değişiklik ve dağıtılan sürüm

Uygulama günlüğünde istek yoksa ön sunucu veya proxy’yi; istek var ama rota eşleşmiyorsa uygulama tanımını inceleyin.

Sık yapılan hatalar​


Yalnız URL'yi değiştirmek: Aynı adresin sonuna başka bir yol eklemek, istemci yanlış yöntem gönderiyorsa sorunu çözmez. Yöntem ile rota tanımı birlikte kontrol edilmelidir.

POST yerine GET kullanmak: Sadece 405 kaybolsun diye kayıt oluşturma, güncelleme veya silme işlemini GET'e çevirmek; önbellekleme, bağlantı paylaşımı ve istem dışı tekrar istekler nedeniyle yanlış davranışlara yol açabilir.

CORS ile 405'i aynı şey sanmak: CORS tarayıcının izin kontrolüdür; 405 ise sunucunun yöntemi kabul etmemesidir. OPTIONS isteği başarısızsa hem CORS yanıtı hem de OPTIONS yöntemi ayrı ayrı incelenmelidir.

Her katmanda yöntemi körlemesine açmak: Web sunucusunda tüm yöntemleri serbest bırakmak, uygulamanın gerçekten desteklemediği işlemleri güvenli veya çalışır hale getirmez. Yalnızca uygulamanın ihtiyaç duyduğu yöntemleri, doğru rota üzerinde tanımlayın.

Sık sorulan sorular​

405 hatası sunucunun kapalı olduğu anlamına mı gelir?​

Hayır. Sunucu isteğe yanıt verebildiği için erişilebilir durumdadır; sorun, belirli URL'de kullanılan HTTP yönteminin kabul edilmemesi veya yanlış katmanda reddedilmesidir.

405 hatası istemcide mi, sunucuda mı düzeltilir?​

Nedene göre değişir. İstemci yanlış yöntem gönderiyorsa istemci düzeltilir; rota eksikse uygulama düzeltilir; proxy veya web sunucusu yöntemi engelliyorsa ilgili yapılandırma düzeltilir. Önce isteğin hangi katmanda reddedildiğini günlük ve yanıt başlıklarıyla ayırmak gerekir.

Allow başlığı yoksa hangi yöntemi kullanacağımı nasıl anlarım?​

İstemcinin kullandığı API veya uygulama sözleşmesine bakın ve sunucu günlüklerini inceleyin. Rota kodunda hangi yöntemlerin tanımlı olduğunu doğrulamadan yöntemi tahmin ederek değiştirmeyin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic