v2.5.2
Giriş yap

ReactJS & NodeJS hakkında

ozguryurt
244 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?

gokcin
289 gün önce

Bu tür bir sorunla karşılaştığınızda birkaç farklı nedene bakmanız gerekebilir. İşte sorununuzu çözmek için kontrol etmeniz gereken bazı olası nedenler:

  1. CORS (Cross-Origin Resource Sharing) Ayarları:

    • POST isteği yaparken tarayıcılar genellikle aynı kök etki alanına (origin) sahip olmalıdır. Farklı alt alanlara (subdomain) yapılan POST istekleri için CORS ayarlarını kontrol edin.
    • server.mydomain.com'daki ExpressJS sunucusunda CORS başlıklarını düzenleyin. ExpressJS uygulamanızda cors middleware kullanarak bu başlıkları ayarlayabilirsiniz.
  2. Firewall veya Güvenlik Duvarı Ayarları:

    • Sunucunuzdaki güvenlik duvarı, POST isteklerini engelliyor olabilir. Hosting sağlayıcınızın cPanel arayüzünden güvenlik duvarı ayarlarını kontrol edin.
  3. Network Sorunları:

    • Sunucunuzun network ayarlarını kontrol edin. Özellikle router ayarları ve DNS konfigürasyonlarını gözden geçirin.
  4. HTTP ve HTTPS Sorunları:

    • Farklı protokollerle (HTTP ve HTTPS) çalışan sunucular arasında da CORS sorunları yaşanabilir. İsteklerinizi aynı protokolle yapmaya çalışın. Örneğin, her iki sunucunuzu da HTTPS üzerinden çalıştırmayı deneyin.
  5. Timeout Ayarları:

    • İstek zaman aşımına (timeout) neden olabilecek sunucu veya istemci tarafındaki timeout ayarlarını kontrol edin.
  6. Header Problemleri:

    • POST isteği sırasında gönderilen başlıkları ve veriyi kontrol edin. Yanlış başlık ayarları veya eksik bilgiler, sunucunuzun isteği doğru bir şekilde işleyememesine neden olabilir.
  7. Günlükleri Kontrol Etme:

    • Sunucunuzdaki günlükleri (logları) kontrol ederek, isteğin neden zaman aşımına uğradığını veya başarısız olduğunu anlamaya çalışın.

Yukarıdaki kontrollerden sonra sorun hala çözülmezse, daha fazla bilgi edinmek ve sorunu daha iyi tanımlamak için günlükleri (logları) incelemek yararlı olabilir.

Tabii ki, işte CORS sorununu çözmek için ExpressJS uygulamanızda kullanabileceğiniz basit bir CORS yapılandırması:

  1. Önce, Express uygulamanızın başında cors middleware'ini kullanarak CORS ayarlarınızı yapılandırın. npm install cors komutu ile önce cors middleware'ini yüklemeniz gerekebilir.
const express = require('express');
const cors = require('cors');

const app = express();

// CORS middleware'i ekleyerek tüm kaynaklara erişime izin ver
app.use(cors());

// Diğer middleware ve route tanımlamaları buraya gelecek

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

Yukarıdaki kod, tüm kaynaklardan gelen isteklere izin vererek en geniş CORS konfigürasyonunu sağlar. Daha fazla kontrol istiyorsanız, CORS middleware'inin seçeneklerini belirleyebilirsiniz.

  1. CORS middleware'inin özelleştirilmiş seçeneklerini kullanarak sadece belirli kaynaklardan gelen isteklere izin verme örneği:
const express = require('express');
const cors = require('cors');

const app = express();

// Sadece belirli kaynaklardan gelen isteklere izin ver
const corsOptions = {
  origin: ['http://mydomain.com', 'https://mydomain.com'],
  methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
  credentials: true,
  optionsSuccessStatus: 204,
};

app.use(cors(corsOptions));

// Diğer middleware ve route tanımlamaları buraya gelecek

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

Bu örnekte, sadece belirli kökenlere (origin) izin veriliyor ve belirli HTTP metotları destekleniyor. credentials seçeneği, isteğin kimlik doğrulama bilgilerini içerip içermediğini belirler.

Bu örneklerden birini ExpressJS uygulamanıza uyguladıktan sonra, CORS sorununun çözülüp çözülmediğini kontrol edebilirsiniz.