CORS Hatası Nedir?
CORS (Cross-Origin Resource Sharing), bir kaynağın (örneğin bir API) başka bir kaynağa (örneğin bir web sayfası) erişimini kontrol eden bir güvenlik özelliğidir. Kısaca, bir kaynağın sadece aynı kaynağa ait olan başka bir kaynaktan gelen verilere erişebilmesini sağlar. Bu özellik, güvenlik için kritik bir öneme sahiptir, çünkü istemci tarafındaki scriptler (JavaScript gibi) başka bir sunucudan veri çekmeye çalıştığında, bu işlem "Cross-Origin" yani "Farklı Kaynak" olarak değerlendirilir.
CORS Hatasının Nedenleri
CORS hatası genellikle iki ana sebep ile ortaya çıkar:
Eğer API, gelen istekleri doğru bir şekilde doğrulamayan CORS başlıklarını gönderiyorsa, tarayıcı bu isteği reddeder. Yani, sunucu doğru başlıkları içermiyordur. Örneğin, `Access-Control-Allow-Origin` başlığı eksik olabilir. Bu durumda, sunucu yalnızca belirli bir kaynağa izin verirken, diğer kaynaklardan gelen talepleri engeller.
2. Tarayıcı Güvenlik Politikaları
Tarayıcılar, güvenlik sebepleriyle CORS politikasını sıkı bir şekilde uygular. Bu nedenle, farklı kaynaklardan gelen verilerin otomatik olarak erişilmesine izin vermezler.
CORS Hatasını Çözmek İçin Ne Yapmalı?
Eğer bir geliştirici olarak CORS hatası ile karşılaşıyorsanız, aşağıdaki adımları izleyerek bu sorunu çözebilirsiniz:
Sunucunuzun doğru CORS başlıkları gönderdiğinden emin olun. Genellikle, CORS başlıkları şu şekilde olmalıdır:
```javascript
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
```
Burada `Access-Control-Allow-Origin: *` her kaynağa izin verdiğini gösterir. Ancak, daha güvenli bir yaklaşım için sadece belirli bir kaynağa izin vermek de mümkündür. Örneğin:
```javascript
Access-Control-Allow-Origin: https://www.orneksite.com
```
# 2. Proxy Kullanmayı Düşünün
Eğer sunucunuzda değişiklik yapma imkanınız yoksa, bir proxy kullanarak bu sorunu geçici olarak çözebilirsiniz. Proxy sunucu, tarayıcı ile sunucu arasındaki istekleri yönlendirir ve CORS başlıklarını doğru şekilde ekler.
```javascript
fetch('https://proxy.site.com/api/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
})
```
# 3. JSONP veya iFrame Kullanımı
Eğer API'niz CORS'u desteklemiyorsa ve sadece veri çekmek istiyorsanız, eski ama etkili bir yöntem olan JSONP kullanmayı düşünebilirsiniz. Ayrıca, iFrame kullanarak da bazı işlemleri gerçekleştirebilirsiniz.
1. Sunucu ve İstemci Tarafında Uyumu Sağlayın: API'niz ile web uygulamanızın aynı domain üzerinde olmasına özen gösterin. Aynı domain kullanmak, CORS sorunlarını büyük ölçüde engeller.
2. CORS İzinlerini Sınırlayın: Güvenlik açısından, wildcard (`*`) yerine sadece güvenilir kaynaklara izin vermek her zaman daha sağlıklıdır.
3. Cross-Origin İsteklerde Kimlik Doğrulama Kullanmayın: Cross-Origin isteklerinde kimlik doğrulama (Authentication) kullanmak bazen sorun çıkarabilir. Eğer mümkünse, CORS isteklerinde kimlik doğrulama yapmamaya çalışın.
CORS Hatası ile İlgili Örnek Kod
Çoğu zaman hata mesajları sizi yanlış yönlendirebilir, bu yüzden hatayı anlamak ve doğru çözümü bulmak için sunucu ve istemci tarafında yapmanız gereken ayarları doğru bir şekilde takip etmek önemlidir.
const express = require('express');
const cors = require('cors');
const app = express();
// CORS ayarlarını yapalım
app.use(cors({
origin: 'https://www.orneksite.com', // Yalnızca bu kaynağa izin ver
methods: ['GET', 'POST'],
allowedHeaders: ['Content-Type', 'Authorization'],
}));
app.get('/api/data', (req, res) => {
res.json({ message: 'CORS sorunsuz!' });
});
app.listen(3000, () => {
console.log('Sunucu 3000 portunda çalışıyor...');
});### Sonuç
CORS hataları, web geliştiricilerinin sıklıkla karşılaştığı, ancak doğru adımlar atıldığında kolayca çözülebilen bir sorundur. Sunucu ve istemci tarafındaki doğru yapılandırmalar, hatasız bir şekilde veri almanıza olanak tanır. Bu yazıdaki adımları takip ederek CORS hatalarını çözebilir ve uygulamanızın sorunsuz çalışmasını sağlayabilirsiniz.