Flask ve CORS Hatası ile Tanışın
Flask ile bir API geliştirdiyseniz ve front-end tarafında bir uygulama çalıştırıyorsanız, büyük ihtimalle "CORS Policy" hatası ile karşılaşmışsınızdır. Eğer bu hatayı gördüyseniz, yalnızca bir hata değil, aynı zamanda web geliştirme yolculuğunuzda önemli bir dönemeçle karşı karşıyasınız demektir. Bu yazımızda Flask ile ilgili yaşadığınız bu CORS (Cross-Origin Resource Sharing) sorununun nasıl çözüleceğine dair adım adım bir rehber sunacağız.
CORS Hatası Nedir?
CORS hatası, aslında tarayıcı güvenlik politikalarının bir sonucudur. Tarayıcılar, farklı domainler veya portlar arasında veri paylaşımını kısıtlayarak, kötü niyetli saldırıların önüne geçmeye çalışır. Flask'ta API geliştirdiğinizde, front-end ile arka uç arasında bir "cross-origin" isteği yapılırsa, tarayıcı bu isteği engelleyebilir. Bunun sonucunda "CORS policy" hatası alırsınız.
Örnek bir hata mesajı:
"Access to fetch at 'http://localhost:5000/api/data' from origin 'http://localhost:3000' has been blocked by CORS policy."
CORS Sorununu Çözmek İçin Flask'ta Ne Yapmalısınız?
Endişelenmeyin! Flask'ta CORS hatasını çözmek aslında oldukça basittir. İhtiyacınız olan tek şey, doğru kütüphaneyi yükleyip, basit bir yapılandırma eklemektir.
Adım 1: Flask-CORS Kütüphanesini Kurun
Flask'ta CORS hatasını çözmenin ilk adımı, Flask-CORS kütüphanesini yüklemektir. Flask-CORS, Flask uygulamanıza CORS desteği ekler ve ilgili başlıkları otomatik olarak yönetir.
Bunu pip ile kolayca yükleyebilirsiniz:
pip install flask-cors
Adım 2: Flask Uygulamanıza CORS'ı Ekleyin
Flask uygulamanıza CORS desteği eklemek oldukça kolaydır. Flask-CORS kütüphanesini import ettikten sonra, sadece bir satırla CORS'ı aktif edebilirsiniz.
İşte temel bir Flask uygulaması örneği:
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
# CORS'ı tüm uygulamaya ekleyin
CORS(app)
@app.route("/api/data", methods=["GET"])
def get_data():
return {"message": "CORS sorunu çözüldü!"}
if __name__ == "__main__":
app.run(debug=True)
Önemli Not: Bu çözüm, uygulamanızdaki her route (yol) için CORS'ı açacaktır. Eğer sadece belirli yollar için CORS’u aktif etmek isterseniz, o zaman sadece o yolları CORS ile işaretleyebilirsiniz.
Adım 3: CORS İzinlerini Özelleştirme
Eğer belirli bir domain’e veya port’a CORS izni vermek isterseniz, bunun için CORS yapılandırmasını özelleştirebilirsiniz. Örneğin, sadece `http://localhost:3000` adresine izin vermek için aşağıdaki gibi bir yapılandırma kullanabilirsiniz:
CORS(app, resources={r"/api/*": {"origins": "http://localhost:3000"}})
Bu şekilde yalnızca belirli yollar ve domainler için CORS izni verebilirsiniz. Güvenlik açısından bu yaklaşım daha iyidir çünkü sadece belirli kaynaklardan gelen istekleri kabul edersiniz.
Başka CORS Konfigürasyonları
Flask-CORS, çok daha fazla konfigürasyon seçeneği sunar. İhtiyacınıza göre CORS başlıklarını detaylı bir şekilde yapılandırabilirsiniz. İşte bazı yaygın kullanılan seçenekler:
- origins: İzin verilen kaynakları tanımlar.
- methods: Hangi HTTP metodlarına izin verileceğini belirler.
- allow_headers: İzin verilen başlıkları belirtir.
- expose_headers: İstemcinin erişebileceği başlıkları belirler.
- supports_credentials: Kullanıcı kimlik doğrulaması için izin verir.
Örneğin, belirli metodlara izin vererek daha güvenli bir yapı oluşturabilirsiniz:
CORS(app, resources={r"/api/*": {"origins": "http://localhost:3000", "methods": ["GET", "POST"]}})
CORS Hatası İle İlgili Sık Karşılaşılan Sorunlar ve Çözümleri
- Hata 1: "No 'Access-Control-Allow-Origin' header is present on the requested resource."
- Çözüm: Flask uygulamanızda CORS başlıklarını eklediğinizden emin olun. Flask-CORS’ın doğru şekilde yapılandırıldığından ve başlıkların doğru yolla gönderildiğinden emin olun.
- Hata 2: "CORS policy: No 'Access-Control-Allow-Methods' header is present."
- Çözüm: İlgili HTTP metodlarını `methods` parametresiyle belirtin.
Sonuç
Flask ile API geliştirmek ve bir front-end uygulamasıyla entegre çalıştırmak bazen CORS politikaları yüzünden zorlayıcı olabilir. Ancak, Flask-CORS kütüphanesini kullanarak bu sorunları hızlıca çözebilirsiniz. Bu yazımızda CORS hatasını nasıl çözebileceğinizi ve bu hatayı önlemek için Flask’ta nasıl yapılandırma yapabileceğinizi detaylı bir şekilde inceledik.
Artık CORS Hatası Geçmişte Kaldı!
Geliştirme sürecinde karşılaştığınız bu tip küçük engeller aslında sizi daha iyi bir yazılımcı yapıyor. Unutmayın, her çözüm yeni bir öğrenme fırsatıdır. Flask ile API geliştirmeye devam ederken, CORS hatalarını hızlıca çözerek projelerinizi sorunsuz bir şekilde hayata geçirebilirsiniz.