1. CORS Nedir ve Neden Ortaya Çıkar?
CORS (Cross-Origin Resource Sharing), web tarayıcılarının bir alan adından (origin) yüklenen bir web uygulamasının başka bir alan adına ait kaynaklara erişmesini denetleyen temel bir güvenlik mekanizmasıdır. Bir origin; protokol (HTTP/HTTPS), alan adı (domain) ve port bileşiminden oluşur.
Örneğin siz https://webplayer.akipa.app adresinde bulunurken, tarayıcınız arka planda çalışan JavaScript (Hls.js / mpegts.js) üzerinden http://iptv-sunucusu.com:8080/live/kanal.m3u8 adresine bir fetch veya XMLHttpRequest isteği gönderdiğinde iki temel tarayıcı güvenlik kuralı devreye girer:
- Mixed Content (Karma İçerik Engeli): Güvenli bir HTTPS web sayfası üzerinden şifrelenmemiş düz HTTP kaynağına yapılan aktif istekler (XHR, fetch, video) tarayıcı tarafından otomatik olarak engellenir.
- Eksik Access-Control Başlığı: Hedef IPTV sunucusu yanıtında
Access-Control-Allow-Origin: *veyaAccess-Control-Allow-Origin: https://webplayer.akipa.appbaşlığını dönmüyorsa, tarayıcı indirilen segment verilerini güvenlik gerekçesiyle JavaScript motoruna teslim etmeyi reddeder.
VLC veya masaüstü uygulamalarında bu hatayı görmemenizin nedeni basittir: Masaüstü C++ yazılımları bir web tarayıcısı değildir ve W3C web güvenlik sandbox kurallarına tabi değildir.
2. İstemci ve Sunucu Seviyesinde Çözüm Yöntemleri
IPTV akışlarındaki CORS ve Mixed Content sorununu aşmanın endüstri standardı 3 yöntemi bulunmaktadır:
Yöntem A: Yayın Sunucusunda Nginx CORS Yapılandırması
Eğer IPTV sunucusunu veya kendi CDN proxy'nizi yönetiyorsanız, Nginx yapılandırma dosyanıza aşağıdaki başlıkları ekleyerek tarayıcıların yayını doğrudan oynatmasına izin verebilirsiniz:
location / {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, HEAD, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Range, DNT, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length, Content-Range' always;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
proxy_pass http://upstream_iptv_backend;
}Yöntem B: Akipa Web Player Opt-In Stream Proxy
Kullanıcıların %95'i üçüncü taraf bir IPTV sağlayıcısından hizmet alır ve sunucu yapılandırmasını değiştirme yetkisine sahip değildir. Akipa Web Player bu sorunu Opt-in Proxy Mimarisi ile çözer:
- Oynatıcı önce video kaynağına doğrudan bağlanmayı dener (Direct-first). Eğer sağlayıcı CORS başlığı veriyorsa veya HTTPS destekliyorsa, hiçbir sunucu araya girmez.
- Eğer tarayıcı CORS veya Mixed Content hatası verirse,
PlayerControllerdurumu anında yakalar ve yayını otomatik olarak SSL sonlandırması ve CORS başlığı ekleyen Nginx ters proxy'sine (https://stream.akipa.app/proxy/...) yönlendirir. - Bu sayede kullanıcı hiçbir eklenti yüklemeden akışı kesintisiz izleyebilir.
3. CORS ve Ağ Hataları Teşhis Tablosu
| Hata Belirtisi | Konsol Kaydı | Çözüm Adımı |
|---|---|---|
| Mixed Content Blokajı | Blocked loading mixed active content 'http://...' | Akipa Opt-In SSL Proxy devreye girer |
| CORS Origin Reddi | No 'Access-Control-Allow-Origin' header is present | Proxy üzerinden CORS başlıkları enjekte edilir |
| Ön Uçuş (Preflight) 404 | Response to preflight request doesn't pass access control | Sunucuda OPTIONS isteklerine 204 yanıtı tanımlanmalı |
Sıkça Sorulan Sorular
Tarayıcımda "CORS Unblock" eklentisi kurmak güvenli mi?
Genel CORS eklentileri tarayıcınızın tüm web sitelerindeki Same-Origin güvenlik kalkanını devre dışı bırakır. Bu durum bankacılık ve e-posta oturumlarınızı kötü niyetli üçüncü taraf sitelerin XSS saldırılarına açık hale getirir. Tüm tarayıcıyı savunmasız bırakmak yerine Akipa gibi akış bazlı proxy kullanan güvenli web oynatıcıları tercih edilmelidir.