Bir sabah, kod yazarken karşılaştığınız o sinir bozucu hata mesajını hatırlıyor musunuz? “CORS policy error!” (CORS politikası hatası) ve hemen ne olduğunu çözmeye çalışıyorsunuz. Ancak hata, tam olarak ne demek istiyor? Ne kadar çözmeye çalışsanız da, her zaman o hata bir şekilde geri dönüyor. Hadi gelin, CORS hatalarını birlikte anlamaya çalışalım ve nasıl çözüleceğini öğrenelim.
CORS Hatası Nedir?
Peki, CORS hatası ne zaman ortaya çıkar? İşte örneğimiz:
Diyelim ki bir frontend uygulamanız var. Bu uygulama, başka bir sunucudaki API'ye veri çekmeye çalışıyor. Ancak, frontend ile API farklı etki alanlarına sahipler. Bu durumda, API tarafı CORS politikaları nedeniyle, frontend'in veri çekmesine izin vermez ve “CORS policy error” hatası alırsınız.
CORS Hatalarının Nedenleri
1. Farklı Etki Alanları: Bir uygulama, farklı bir etki alanından veri çekmeye çalıştığında, CORS hatası meydana gelir. Örneğin, frontend `example1.com` ve API `example2.com` üzerinde çalışıyorsa, bu iki etki alanı arasındaki iletişim engellenir.
2. Yanıt Başlıkları Eksik: API, gelen istekleri kontrol etmeli ve doğru CORS başlıklarını göndermelidir. Eğer bu başlıklar eksikse veya yanlışsa, tarayıcı isteği engeller.
3. Tarayıcı Politikaları: Bazı tarayıcılar, güvenlik amacıyla daha katı CORS politikaları uygulayabilir. Bu, bazen geliştiriciye zorluklar çıkarabilir.
4. Preflight İsteklerinin Engellenmesi: CORS, bazı durumlarda önceden (preflight) istekler yapar. Eğer bu istekler doğru şekilde işlenmezse, asıl istek de engellenir.
CORS Hatası Nasıl Çözülür?
CORS hatalarını genellikle API tarafında çözebilirsiniz. Sunucunuza uygun başlıkları ekleyerek, farklı etki alanlarından gelen isteklerin kabul edilmesini sağlayabilirsiniz.
Örneğin, Node.js ile Express kullanıyorsanız, `cors` paketini kullanarak çözüm bulabilirsiniz:
```bash
npm install cors
```
Sonrasında, API'nizi şu şekilde yapılandırabilirsiniz:
```javascript
const express = require('express');
const cors = require('cors');
const app = express();
// CORS başlıklarını otomatik ekleyin
app.use(cors());
// API endpoint'leri burada olacak
app.get('/api/data', (req, res) => {
res.json({ message: 'CORS is enabled!' });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
```
Bu yöntem, API'nizin CORS hatalarını ortadan kaldıracaktır. Sunucunuzun farklı etki alanlarından gelen istekleri kabul etmesini sağlarsınız.
Eğer özel bir sunucu kullanıyorsanız ve tüm etki alanlarını kabul etmek istemiyorsanız, belirli bir etki alanını belirtmek isteyebilirsiniz. Örneğin:
```javascript
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', 'https://example1.com');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
next();
});
```
Bu şekilde yalnızca `https://example1.com` etki alanından gelen istekleri kabul edersiniz.
# 3. Preflight İsteklerini Doğru Yönetin**
```javascript
app.options('*', (req, res) => {
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.sendStatus(200);
});
```
Bu, tarayıcının preflight isteğini başarılı bir şekilde yanıtlayacaktır.
Sonuç
###