Cross Origin Resource Sharing (CORS)

CORS, “kökler arası kaynak paylaşımı” anlamına gelir. SOP politikası yüzünden aynı origine sahip olunmadan başka bir kaynakta, dosya içeriğini değiştiremiyoruz. Günümüz teknolojisinde buna ihtiyaç olduğu kaçınılmaz. Hatta bazı teknolojiler sırf bu amaç için hizmet verirler. Örnek verelim, CDN (Content Delivery Network) yani içerik aktarma ağı . CDN, js dosyaları ve img dosyaları gibi statik olan dosya türlerini içinde barındıran ve sitelere bu dosyalara erişim sağlayan sunuculardır. Bir örnek verelim, facebook img dosyalarını farklı bir CDN içinde tutup oradan dosyaları çağırır. Buna SOP izin vermiyor çünkü farklı origindeler. SOP izin vermiyor ama facebook izin verdiği origin adreslerine bu sayede erişim sağlayabiliyor. Şimdi nasıl izin verildiğine bakalım.

Simple Request

Tarayıcılar eğer, GET, POST, HEAD methotlarından birini kullanarak ve Accept, Accept-Language, Content-Language, Content-Type header türlerini kullanarak istek yaparlarsa buna simple request denir. Burada izin söz konusu değildir. Tarayıcılar izin kontrolü yapmaksızın simple request gönderirler.

Prefligh Request

Simple request dışında bir methot ya da header kullanmak istenildiğinde tarayıcı izinleri öğrenebilmek için options request gönderir. Buna prefligh request (ön kontrol isteği) denir.
Bu istek paketindeki en önemli header olanı origin headerdır. Request gönderildiğinde origin headerı protokol, domain ve port bilgisini gönderir (Eğer protokol ve port bilgisi gönderilmiyorsa varsayılan olarak https ve 80 gönderilir).

Örnek,

Origin: abc.com  
Access-Control-Request-Method: POST 
OPTİONS /ornek.html HTTP/1.1 
Access-Control-Request-Header: x-user-id

Sunucudan gelen response;

Access-Control-Allow-Origin: *    
Access-Control-Allow-Credenials: True

İlk header ile *(yıldız) cevabı “tüm originlere izin ver” anlamına gelir. Buraya sadece bir adres girerek sadece bu adrese izin ver diyebiliriz. İkinci header cevabı ise “cookie ile ulaşmak istenildiğinde izin ver” anlamına gelir.
Burada dikkatli olunması gereken nokta, yazılımcı gelen isteği kontrol etmeli ve gelen origini doğrudan response header paketine eklememelidir. İstek yapılan origin için sorgusuz sualsiz izin verilmemelidir.

results matching ""

    No results matching ""