CORS Hatası Nedir?
CORS hatası, bir web sayfasının, farklı bir domain (alan adı) üzerindeki kaynağa (genellikle API'lere) erişmeye çalıştığında, o kaynağın güvenlik politikalarının buna izin vermemesi durumunda ortaya çıkar. Bu, web uygulamanızın düzgün çalışmamasına ve API isteklerinizin başarısız olmasına neden olabilir.
CORS Hatasının Sebepleri
1. Başka Bir Domain Üzerindeki Kaynağa Erişim
Web sayfanız, başka bir domain üzerinde bulunan API'ye veri göndermeye çalışıyorsa ve bu API, tarayıcıya doğru CORS başlıklarını göndermiyorsa, hata meydana gelir.
2. HTTP İstekleri ve Yöntemler
GET, POST, PUT, DELETE gibi HTTP istekleri, her zaman aynı CORS politikasına tabidir. Eğer API, özel HTTP metodlarını kabul etmiyorsa, hata alırsınız.
3. Preflight İstekleri
Bazı durumlarda, tarayıcı, CORS politikalarını doğrulamak için “preflight” (ön uçuş) isteği gönderir. Eğer sunucu bu isteği doğru şekilde yanıtlamazsa, yine hata alırsınız.
CORS Hatalarını Çözmek
# 1. Sunucuda CORS Ayarlarını Yapılandırmak
Sunucunuzda CORS ayarlarını doğru şekilde yapılandırmak en etkili çözüm yollarından biridir. Sunucunuz, hangi kaynaklardan gelen isteklere izin vereceğini belirtir. Örneğin, Node.js kullanıyorsanız, `cors` paketini yükleyebilir ve şu şekilde yapılandırabilirsiniz:
const cors = require('cors');
app.use(cors());
Bu kod, tüm dış kaynaklardan gelen istekleri kabul eder. Tabii ki, güvenlik için belirli kaynaklara kısıtlamalar getirebilirsiniz.
# 2. Preflight Yanıtlarını Düzenlemek
Preflight istekleri, tarayıcıların güvenli bir şekilde CORS isteği yapmadan önce sunucudan onay almak için gönderdiği OPTIONS istekleridir. Sunucunuzun bu isteklere doğru yanıt vermesi gerekir. Aşağıdaki gibi bir yanıt gönderebilirsiniz:
app.options('*', cors()); // Preflight isteği için doğru yanıtı gönder
# 3. API'ye XHR veya Fetch İsteklerini Yapılandırmak
API'lere yaptığınız isteklerde, `fetch` veya `XMLHttpRequest` kullanıyorsanız, bazı ayarlar ile bu hataları önleyebilirsiniz. Örneğin:
fetch('https://api.example.com/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
mode: 'cors'
})
Bu sayede, tarayıcı API’ye CORS ile uyumlu şekilde istek gönderir.
# 4. Proksi Kullanmak
Geliştirme sırasında CORS hatası alıyorsanız ve çözüm bulamıyorsanız, bir proksi kullanmak hızlı bir geçici çözüm olabilir. Örneğin, `http-proxy-middleware` kullanarak API isteklerinizi yönlendirebilirsiniz:
const proxy = require('http-proxy-middleware');
app.use('/api', proxy({ target: 'https://api.example.com', changeOrigin: true }));
CORS Hatalarını Önlemek İçin İpuçları
- Sunucunun Yanıtlarını Kontrol Edin: Sunucunun doğru CORS başlıklarını gönderdiğinden emin olun.
- Geliştirme ve Üretim Ortamları İçin Farklı CORS Politikaları: Geliştirme ortamında daha geniş izinler verilebilirken, üretim ortamında güvenliği artırmak için kısıtlamalar getirilmelidir.