Böyle bir hata alırsanız, frontend ve backend uygulamalarınızın farklı domainlerde çalıştığını varsayabiliriz. Bu, aynı kaynağa (API'ye) farklı originlerden yapılacak taleplerin CORS politikaları ile kısıtlandığı anlamına gelir.
Bugün, Flask CORS Policy Hatasını çözmek için kullanabileceğiniz adımları, hem anlamanızı kolaylaştıracak hem de kolayca çözümlemenizi sağlayacak bir rehberde anlatacağım.
Adım 1: Hata Nedir?
```
Access to fetch at 'http://localhost:5000/api/data' from origin 'http://localhost:3000' has been blocked by CORS policy.
```
Bu hata, frontend uygulamanızdan (örneğin, React veya Vue.js kullanıyorsanız, localhost:3000'de çalışıyor olabilir) Flask backend'inize (localhost:5000) yapılan isteklerin, CORS politikaları tarafından engellendiğini gösterir. Yani, tarayıcı, bu isteklerin güvenlik nedeniyle yapılmasına izin vermez.
Adım 2: Flask Uygulamasına CORS Desteği Ekleyin
# 1. Flask-CORS Kütüphanesini Kurun
```bash
pip install flask-cors
```
# 2. Flask Uygulamanızda CORS'ı Etkinleştirin
```python
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
# CORS'ı tüm API'lere uygulamak için
CORS(app)
@app.route('/api/data', methods=['GET'])
def get_data():
return jsonify({"message": "CORS is enabled!"})
if __name__ == "__main__":
app.run(debug=True)
```
Yukarıdaki kodda, CORS(app) ile uygulamamızdaki tüm rotalarda CORS desteğini etkinleştiriyoruz. Artık frontend uygulamanızdan gelen tüm talepler bu API'ye ulaşabilecek.
Adım 3: CORS'ı Özel Olarak Yapılandırma
```python
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
# Sadece /api/data rotasına CORS'u uygulayalım
CORS(app, resources={r"/api/data": {"origins": "http://localhost:3000"}})
@app.route('/api/data', methods=['GET'])
def get_data():
return jsonify({"message": "CORS is enabled for this route!"})
if __name__ == "__main__":
app.run(debug=True)
```
Bu şekilde, yalnızca /api/data rotasına localhost:3000'den gelen taleplerin kabul edilmesine izin vermiş olduk.
Adım 4: CORS Hatalarını Düzeltmenin Diğer Yöntemleri
- Allow-Headers: Eğer frontend uygulamanız özel başlıklar (headers) gönderiyorsa, bu başlıkları belirtmeniz gerekebilir. Örneğin:
```python
CORS(app, allow_headers=["Content-Type", "Authorization"])
```
- Allow Methods: Eğer sadece belirli HTTP metodlarına izin vermek istiyorsanız:
```python
CORS(app, methods=["GET", "POST"])
```
Bu ayarlarla, sadece belirttiğiniz HTTP metotları için CORS erişimi sağlanır.
Adım 5: Flask CORS İle Güvenlik
Örneğin, canlı ortamda yalnızca belirli bir frontend uygulamasından gelen talepleri kabul etmek iyi bir güvenlik önlemi olacaktır. origins parametresi ile bunu yapılandırabilirsiniz:
```python
CORS(app, resources={r"/api/*": {"origins": "https://yourfrontenddomain.com"}})
```
Sonuç
Flask ile CORS sorununu nasıl çözdüğünüzü öğrendiniz, bu bilgiyi projelerinizde rahatça kullanabilirsiniz. Eğer takıldığınız bir yer olursa, size yardımcı olmaktan mutluluk duyarım!