Flask ile CORS Policy Hatası Nasıl Çözülür?

Flask ile CORS hatası nasıl çözülür? Flask-CORS kullanarak kolayca bu hatayı nasıl çözebileceğinizi detaylı bir şekilde öğrenin.

BFS

Her web geliştiricisinin karşılaştığı o korkutucu anlardan biri vardır: Flask ile geliştirdiğiniz bir API'yi test ederken "CORS Policy Issue" hatasıyla karşılaşmak. Eğer siz de bu hatayı aldıysanız, yalnız değilsiniz. Hem yeni başlayanlar hem de deneyimli geliştiriciler bu soruyla başa çıkmakta zorlanabiliyor. Ama merak etmeyin, çözümü oldukça basit ve adım adım ilerleyerek bu sorunu çözebiliriz.

Öncelikle CORS Nedir?



CORS, yani "Cross-Origin Resource Sharing" (Çapraz Kaynak Paylaşımı), bir web sayfasının başka bir kaynaktan (domain, protokol veya port) gelen kaynaklara erişmesini kontrol eden bir güvenlik mekanizmasıdır. Yani, bir web sayfası başka bir sunucudan veri almak istediğinde, tarayıcı bu isteği güvenlik nedeniyle engeller. İşte burada CORS devreye girer; sunucu, gelen isteklerin hangi kaynaklardan geldiğine göre hangi isteklere izin vereceğini belirtir.

Flask'ta CORS hatası genellikle iki kaynaktan gelen istekler arasındaki erişim kısıtlamaları nedeniyle ortaya çıkar.



Flask ve CORS Hatası



Flask ile API geliştirdiğinizde, bazen frontend uygulamanız başka bir domain üzerinden API'ye erişmeye çalışır. Eğer Flask backend'iniz, gelen isteği kabul etmezse ve uygun CORS başlıkları ayarlanmamışsa, tarayıcı bu isteği engeller ve "CORS Policy" hatası alırsınız. Bu da kullanıcıların frontend ile backend arasında iletişim kuramamasına sebep olur.

Ama korkmayın! Bu hatayı çözmek, birkaç basit adımda yapılabilir.

CORS Hatasını Çözmek İçin Flask’a CORS Desteği Eklemek



Flask’ta CORS hatasını çözmenin en hızlı ve güvenli yolu, Flask-CORS kütüphanesini kullanmaktır. Flask-CORS, Flask uygulamanıza CORS başlıklarını eklemenizi sağlar ve bu şekilde dış kaynaklardan gelen istekleri güvenli bir şekilde kabul edebilirsiniz.

İşte adım adım yapmanız gerekenler:

1. Flask-CORS Kütüphanesini Kurun

İlk adım, Flask-CORS kütüphanesini projenize eklemektir. Eğer henüz yüklemediyseniz, terminal üzerinden şu komutla yükleyebilirsiniz:


pip install flask-cors


2. Flask Uygulamanıza CORS Ekleme

Flask-CORS’ı yükledikten sonra, Flask uygulamanıza basit bir şekilde ekleyebilirsiniz. Aşağıda, CORS başlıklarını tüm domainlere açan bir örnek kodu bulabilirsiniz.


from flask import Flask
from flask_cors import CORS

app = Flask(__name__)

# Tüm domainlere CORS izni veriyoruz
CORS(app)

@app.route('/api', methods=['GET'])
def api():
    return {'message': 'CORS başlıkları eklenmiş başarılı bir cevap!'}

if __name__ == '__main__':
    app.run(debug=True)


Bu basit yapı, Flask uygulamanıza CORS başlıkları ekleyecek ve tüm dış kaynaklardan gelen istekleri kabul edecektir.

3. Belirli Kaynaklara CORS İzni Verme

Eğer sadece belirli bir domain’e (örneğin, frontend’inizin bulunduğu site) izin vermek istiyorsanız, Flask-CORS’ı daha özelleştirebilirsiniz. Örneğin:


from flask import Flask
from flask_cors import CORS

app = Flask(__name__)

# Sadece belirli bir domain’e izin veriyoruz
CORS(app, resources={r"/api/*": {"origins": "https://frontend-domain.com"}})

@app.route('/api', methods=['GET'])
def api():
    return {'message': 'Bu sadece belirli bir domain için geçerli!'}

if __name__ == '__main__':
    app.run(debug=True)


Bu durumda, sadece "https://frontend-domain.com" adresinden gelen istekler kabul edilecek.

Alternatif Yöntemler ve İpuçları



- Preflight Request: Eğer bir HTTP isteği, GET dışında başka bir metod kullanıyorsa (örneğin, POST, PUT, DELETE vb.), bu durumda "preflight" istekleri yapılır. Bu istek, tarayıcı tarafından otomatik olarak gönderilir. Eğer backend doğru şekilde CORS başlıkları döndürmezse, preflight isteği başarısız olur. Flask-CORS, preflight isteklerini otomatik olarak işler.

- CORS Başlıklarını Manuel Ayarlamak: Flask-CORS yerine, kendi başınıza CORS başlıkları eklemek isterseniz, `after_request` fonksiyonunu kullanarak her yanıtın başlıklarına CORS ekleyebilirsiniz:


from flask import Flask, jsonify

app = Flask(__name__)

@app.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    response.headers.add('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
    response.headers.add('Access-Control-Allow-Headers', 'Content-Type')
    return response

@app.route('/api', methods=['GET'])
def api():
    return jsonify(message="Manuel CORS başlıkları eklenmiş başarılı bir cevap!")

if __name__ == '__main__':
    app.run(debug=True)


Bu yöntemle de CORS hatasını çözebilirsiniz, ancak Flask-CORS kullanmak genellikle daha temiz ve daha güvenlidir.

CORS Hatasını Çözerken Dikkat Etmeniz Gerekenler



- CORS başlıklarını doğru şekilde ayarladığınızdan emin olun. Yanlış yapılandırma, güvenlik açıklarına yol açabilir.
- API’nizi yalnızca gerekli domain’lere açın. Gereksiz yere herkese açık hale getirmek, güvenlik risklerini artırır.
- Eğer frontend ve backend aynı domain üzerinde barındırılıyorsa, CORS’a gerek yoktur. Bu tür bir yapıda, her şey doğal olarak aynı kaynak üzerinden geldiği için CORS problemi yaşanmaz.

Sonuç



Flask ile CORS hatası almak gerçekten can sıkıcı olabilir, ancak Flask-CORS ile bu sorunu hızla çözebilirsiniz. İster tüm kaynaklara açın, ister sadece belirli domainlere izin verin, Flask-CORS kullanmak işinizi kolaylaştıracaktır. Artık frontend ve backend arasında sorunsuz bir iletişim sağlayabilirsiniz!

İlgili Yazılar

Benzer konularda diğer yazılarımız

ApiUp Nedir?

Merhabalar, bir süredir üzerinde çalıştığım yeni projemi hayata geçirdim. Bu Proje sayesinde, IRC sunucuları en popüler uygulamalarla entegre edilebiliyor. Şu anda Skype, WhatsApp ve Telegram uygulamalarını destekliyoruz. API Sayesinde, IRC Sunucularından...

ASP.NET Core ile Mobil Uygulama Geliştirme: Cross-Platform Web ve Mobil Uygulama Birleştirme

Günümüzde mobil uygulamalar hayatımızın ayrılmaz bir parçası haline geldi. Akıllı telefonlarımızda geçirdiğimiz zamanın büyük bir kısmını mobil uygulamalar sayesinde geçiriyoruz. Peki, bir mobil uygulama geliştirirken karşılaştığımız zorlukları nasıl...

ASP.NET Core 500 Internal Server Error: Sebepleri ve Çözümleri

Bir web geliştiricisi olarak, karşılaştığınız en zorlayıcı hatalardan biri şüphesiz "500 Internal Server Error"dır. Bu hata, web uygulamanızda her şeyin yolunda gittiğini düşündüğünüz bir anda karşınıza çıkabilir ve tüm projeyi durdurabilir. Ancak merak...