v2.5.2
Giriş yap

ReactJS & NodeJS hakkında

ozguryurt
226 defa görüntülendi

React projemin build edilmiş hali mydomain.com adresine yani public_html klasörüne kurulu.

NodeJS ve ExpressJS ile oluşturduğum sunucu ise server.mydomain.com subdomainine kurulu.

Bu mydomain.com alan adı ve server.mydomain.com aynı Web Hosting'te barınıyor. Bu Web Hosting'i ise cPanel ile yönetiyorum.

mydomain.com/login adresinden server.mydomain.com/auth/login adresine POST isteği gönderemiyorum. 408 request timeout dönüyor. Fakat aynı adrese GET isteği gönderebiliyorum ve Postman'dan da POST isteği gönderebiliyorum.

Sorun ne olabilir?

ebykdrms
251 gün önce
1) Sunucuya Sahte GET İsteği Atmak

Stackoverflow'da 2012 yılından şöyle bir bilgiye rastladım:

Android uygulamam sunucuya POST istekleri gönderdi ve beklendiği gibi çalışıyordu ancak yaklaşık 30 dakika sonra 408 İstek zaman aşımı hataları yaşamaya başladım. 
Ayrıca bir PC'den veya Android cihazdan bir tarayıcı açıp ana sayfamı (PHP Wordpress sitesi) açtığımda sorunun ortadan kalktığını fark ettim. 
Web sitesi testte olduğundan web trafiği minimum düzeydeydi ve bu davranışı sunucu günlüklerinde oldukça kolay bir şekilde doğrulayabildim.
POST isteğimden önce sahte bir GET isteği yürüterek bu soruna geçici bir çözüm bulmayı başardım ve bu, web sunucusunu 'uyandırdı' ve sonraki tüm POST isteklerine yanıt verdi.

Buna 2015'te gelen bir yanıtta da şu bilgi veriliyor:

Bağlantıları sıfırlayarak müdahale eden bazı trafik izleme aracıları için tüm POST'lar ve otuz dakika boyunca hiçbir GET'in olmaması şüpheli görünüyor. 
Trafiğin kötü niyetli olduğunu düşündükleri takdirde her iki uca da sahte sıfırlamalar gönderen ürünler var. 
Bu daha sonra bağlantıyı keserek zaman aşımına neden olur.

2016'da da aynı yanıta söyle bir yorum eklenmiş:

Bana öyle geliyor ki, en azından bazı durumlarda bu sorunlar oturum zaman aşımlarından da kaynaklanıyor olabilir. 
Oturum yenilemeleri GET istekleri için gerçekleştiriliyor ancak POST istekleri için gerçekleştirilmiyor olabilir; bu da 'uyanma' davranışını açıklayabilir.

Buna göre, siz de arada bir sunucuya sahte GET istekleri atarak sunucuyu 'uyandırmayı' deneyebilirsiniz.
Kaynak: https://stackoverflow.com/questions/1667720/http-408-request-timeout

2) response.end() Kullanılmamış Olabilir

Postman'dan yanıt alabiliyorsanız sorun bu değildir muhtemelen.
Ama endpoint'inizde veya bir middleware'ınızda response.end() (veya .send() gibi bir istek sonlandırıcı sonlandırıcı fonksiyon) komutuna ulaşılmasını önleyen bir koşul oluşuyor olabilir.
Mesela header'ları kontrol ettiğiniz bir aşamada bir return ifadesi kullanmışsınızdır ve response.end() komutuna ulaşılmasını önlemişsinizdir veya bir if-else yapınız response.end() komutunu atlamanıza neden oluyor olabilir.
Sunucunuza bir console.log() ekleyip gelen header'ı terminale basın.
Sonra siteden ve Postman'dan ayrı ayrı istek atın ve header'lar arasındaki farklara bakın.
Fark yoksa, bir isteğin geçtiği tüm aşamaları takip edip response.end() komutunun çalışmadan işlemlerin bittiği bir durum var mı diye inceleyin.
Kaynak: https://stackoverflow.com/questions/22773927/408-timeout-in-nodejs-app-requesting-github-api

3) İstemci, İsteği Yarıda Kesmiş Olabilir

İsteği gönderiyorsunuzdur ama hemen sonra (belki bir state değişimi yüzünden) isteği iptal ediyorsunuzdur.
Aslında yukarıdaki gibi bir sorun ama bu sefer istemci tarafında...
Çözüm olarak yine sunucuya console.log() atıp gelen isteğin body ve header'larını terminale basın. Sonra postman ve site isteklerinin arasındaki farkları bulmaya çalışın.
Kaynak: https://docs.aws.amazon.com/en_en/elasticloadbalancing/latest/classic/ts-elb-error-message.html#ts-elb-errorcodes-http408


Daha farklı nedenler de olabilir tabi sunucunun zaman aşımı süresini uzatmak gerekiyor olabilir vs. ama sorun orada olsa Postman da yanıt alamazdı.