# CORS (Kaynaklar Arası Kaynak Paylaşımı)

Adres: https://softwaredictionary.org/tr/terimler/cors
Kategori: Web Geliştirme
Son güncelleme: 2026-09-29
Okunuşu: kors

Kısaca: CORS, bir sunucunun JavaScript'ten istek yapan hangi diğer sitelerin yanıtlarını okuyabileceğini bildirmesini sağlayan tarayıcı güvenlik mekanizmasıdır.

## CORS nedir?

Tarayıcılar aynı kaynak politikasını (same-origin policy) uygular: `https://app.example.com` gibi belirli bir şema, alan adı ve port birleşimi olan bir kaynakta (origin) çalışan JavaScript, varsayılan olarak farklı bir kaynağın yanıtlarını okuyamaz. CORS, sunucunun bu kuralı güvenli biçimde esnetmesinin standart yoludur; hangi kaynaklara izin verildiğini söyleyen HTTP başlıkları gönderir.

Bir sayfa başka bir kaynağa `fetch()` ile istek yaptığında tarayıcı isteğe bir `Origin` başlığı ekler. Yanıtta eşleşen bir `Access-Control-Allow-Origin` başlığı varsa tarayıcı veriyi betiğe verir; yoksa yanıtı engeller ve bir CORS hatası kaydeder. `PUT`, `DELETE` veya özel başlık kullananlar gibi veriyi değiştirebilecek istekler için tarayıcı önce izin sormak üzere bir `OPTIONS` preflight isteği gönderir.

CORS'u, sunucunun yazdığı ve kapıdaki görevli gibi davranan tarayıcının kontrol ettiği bir davetli listesi olarak düşünebilirsiniz. Önemli ayrıntı şudur: bunu sunucu değil tarayıcı uygular. `curl` gibi araçlar ve diğer sunucular CORS'u tamamen yok sayar; bu yüzden bir istek terminalde çalışırken tarayıcıda başarısız olabilir.

Sık yapılan bir hata, CORS'u bir API için koruma sanmaktır. CORS kimsenin istek göndermesini engellemez; yalnızca hangi web sayfalarının yanıtları tarayıcıda okuyabileceğini denetler. Gerçek koruma için yine kimlik doğrulama ve yetkilendirme gerekir. Özel API'lerde `*` ile tüm kaynaklara izin vermek risklidir; tarayıcılar ayrıca `*` değerini cookie gibi kimlik bilgileriyle birlikte kullanmayı reddeder.

## Önemli noktalar

- Tarayıcılar, aynı kaynak politikası gereği varsayılan olarak kaynaklar arası okumaları engeller.
- Sunucunun gönderdiği CORS başlıkları tarayıcıya hangi kaynaklara izin verildiğini söyler.
- Preflight `OPTIONS` istekleri, bazı isteklerden önce izni denetler.
- CORS'u sunucular veya komut satırı araçları değil, tarayıcılar uygular.
- CORS hataları frontend kodunda değil, sunucuda çözülür.

## Örnek: Tek bir kaynağın API'yi çağırmasına izin vermek (Express)

```javascript
app.use((req, res, next) => {
  // Only this front end may read responses in the browser
  res.setHeader("Access-Control-Allow-Origin", "https://app.example.com");
  res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
  res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");

  // Answer preflight requests without running the route
  if (req.method === "OPTIONS") return res.sendStatus(204);
  next();
});
```

## Sık sorulan sorular

**CORS hatasını nasıl düzeltirim?**

API'nin sahibi olan sunucuyu, frontend'inizin kaynağını içeren bir `Access-Control-Allow-Origin` başlığı döndürecek ve preflight `OPTIONS` isteklerini yanıtlayacak şekilde yapılandırın. Hata yalnızca tarayıcı tarafındaki JavaScript ile giderilemez; ancak geliştirme sırasında aynı kaynaktan çalışan bir proxy yaygın bir geçici çözümdür.

**CORS, API'mi saldırganlardan korur mu?**

Hayır. CORS yalnızca tarayıcıların web sayfalarına yanıtları okutup okutmayacağını denetler; saldırganlar API'nizi başka araçlarla doğrudan çağırabilir. Yine kimlik doğrulama, yetkilendirme ve CSRF koruması gerekir.

**Preflight isteği nedir?**

Preflight, tarayıcının bazı kaynaklar arası isteklerden önce sunucunun ilgili metoda ve başlıklara izin verip vermediğini kontrol etmek için otomatik olarak gönderdiği bir `OPTIONS` isteğidir. Sunucu onaylamazsa asıl istek hiç gönderilmez.

## Kaynaklar

- [Fetch Standard: CORS protocol](https://fetch.spec.whatwg.org/#http-cors-protocol)
- [MDN: Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
