CORS nedir? Tarayıcının cross-origin isteklere koyduğu kural
Basit istekler, preflight, kimlik bilgileri ve curl testleri.
Rehberi okuyunCDN.com.tr Yardım
Bir yayınlama kuralının yanıtlarına Access-Control-Allow-Origin ve diğer CORS başlıklarını ekleyin, preflight (ön kontrol) OPTIONS isteklerini kaynak sunucunuz yanıtlasın ve API'nizin kullandığı metotlara WAF'ta izin verin.
Cache, güvenlik, WAF ve purge
Bir yayınlama kuralının yanıtlarına Access-Control-Allow-Origin ve diğer CORS başlıklarını ekleyin, preflight (ön kontrol) OPTIONS isteklerini kaynak sunucunuz yanıtlasın ve API'nizin kullandığı metotlara WAF'ta izin verin.
https://app.example.com; herkesin yükleyebileceği dosyalar için *.OPTIONS isteklerini 200 ya da 204 ile yanıtlıyor.Tarayıcının ne gönderdiği, işin nerede yapılacağını belirler.
GET ile yüklenen fontlar, görseller ve herkese açık JSON: preflight olmaz, kuraldaki Access-Control-Allow-Origin yeterlidir. Hesap geneli görsel optimizasyonu açıkken .jpg, .jpeg ve .png dosyaları yanıt başlıklarını yollarının kuralından değil, alan adının en eski kuralından alır.PUT, PATCH, DELETE kullanan API çağrıları: tarayıcı önce bir preflight isteği gönderir; bunu kaynak sunucunuz yanıtlar, kural da CORS başlıklarını bu yanıta ekleyebilir.* değil, adı yazılmış tek bir origin ve Access-Control-Allow-Credentials true.Her başlık için tek bir kaynak seçin.
always ile bitiyorsa kaynak sunucunuzun 4xx ve 5xx yanıtlarında da.Vary: Origin ile gönderilen bir değer.Tek bir web uygulamasının çağırdığı, /api/ altındaki bir API için örnek. Her satıra bir başlık yazın; boşluk içeren bir değer çift tırnak içine yazılır.
/api/ kuralında Düzenle'ye basın.Access-Control-Allow-Origin https://app.example.com, Access-Control-Allow-Methods "GET, POST, PUT, OPTIONS", Access-Control-Allow-Headers "Content-Type, Authorization" ve Access-Control-Max-Age 600.Beklenen sonuç: Kuralda +4 yanıt başlığı gibi bir etiket görünür; edge kuralı sunmaya başladığında sayfada Yayında yazar.
Site geneli WAF açıkken ve API GET, HEAD, POST ve OPTIONS dışında metot kullanıyorsa gerekir.
PUT, PATCH ya da DELETE'i işaretleyin, OPTIONS işaretli kalsın ve Kaydet'e basın.Beklenen sonuç: Panel kaydı onaylar; değişiklik 1-2 dakika içinde yayılır.
curl CORS kurallarını uygulamaz; bu yüzden edge'in ne yanıt verdiğini olduğu gibi gösterir.
Origin başlığıyla isteyin.Origin, Access-Control-Request-Method ve Access-Control-Request-Headers başlıklarıyla bir OPTIONS isteği.Beklenen sonuç: Basit istekte tek bir access-control-allow-origin bulunur. Preflight isteği, izin verilen origin, metotlar ve başlıklarla 200 ya da 204 döner.
curl -s -o /dev/null -D - -H 'Origin: https://app.example.com' https://www.example.com/api/items | grep -iE '^(HTTP|access-control)'
curl -s -o /dev/null -D - -X OPTIONS -H 'Origin: https://app.example.com' -H 'Access-Control-Request-Method: PUT' -H 'Access-Control-Request-Headers: content-type' https://www.example.com/api/items | grep -iE '^(HTTP|access-control|x-mt-blocked-by)'
app.example.com üzerindeki bir web uygulaması www.example.com'dan font, JSON ya da API yanıtı yüklüyor ve tarayıcı bunları CORS hatasıyla engelliyor.
Başlık-Adı değer biçiminde yazın; örneğin Access-Control-Allow-Origin https://app.example.com. Boşluk içeren bir değer çift tırnak içine yazılır.Access-Control-* başlığı gönderiyorsa aynı adı Başlıkları kaldır altında işaretleyin; tarayıcıya tek bir değer ulaşsın.PUT, PATCH ya da DELETE kullanıyorsa ve site geneli WAF açıksa bu metotları Güvenlik sayfasındaki İzin verilen HTTP metotları altında işaretleyin.always ile biten bir satır, kaynak sunucunuzun 4xx ve 5xx yanıtlarına da eklenir.OPTIONS istekleri kaynak sunucunuza gider ve hiçbir zaman önbelleğe alınmaz. Kaynak sunucunuz preflight isteğini 200 ya da 204 ile yanıtladığında kuralın başlıkları bu yanıta eklenir; 401, 404 ya da 405 ile yanıtlanan bir preflight, satırı always ile bitmedikçe tarayıcıya bu başlıklar olmadan ulaşır. Parola koruması ya da IP izin listesi olan bir kuralda edge, geçirmediği preflight isteğini kendisi 401 ya da 403 ile yanıtlar.Access-Control-Allow-Origin ulaşmalıdır: iki değer gelirse tarayıcı yanıtı reddeder.Access-Control-Allow-Origin değerini istek yapan siteye göre değiştiriyorsa Vary: Origin da göndermelidir. Kuralda Vary başlığı ne derse desin tek önbellek kopyası tut kapalı olduğu sürece edge bu sürümleri ayrı tutar.Access-Control-Request-Method ve Access-Control-Request-Headers işaretsiz kalsın: orada işaretlenen adlar kaynak sunucunuza giden isteklerden de kaldırılır, kaynak sunucunuz ise preflight isteğini yanıtlamak için bu ikisini okur.GET, HEAD, POST ve OPTIONS varsayılan olarak izinlidir. Listede olmayan bir metotla gelen istek CORS başlığı olmayan, X-MT-Blocked-By: cdn-edge-security başlıklı bir 403 alır; tarayıcı bunu CORS hatası olarak gösterir..jpg, .jpeg ve .png dosyaları kendi yollarının kuralının değil, alan adının en eski kuralının yanıt başlıklarını alır: bu görsellerin CORS başlığını sabit bir Access-Control-Allow-Origin değeriyle o kurala ekleyin. En eski kural sertifika doğrulama kuralıysa bu dosyalar hiçbir kural başlığı almaz.Edge OPTIONS isteklerini kaynak sunucunuza iletir ve hiçbir zaman önbelleğe almaz; bu yüzden preflight isteğini kaynak sunucunuz 200 ya da 204 ile yanıtlamalıdır. Kuralın yanıt başlıkları bu yanıta eklenir: CORS başlıkları kuraldan gelebilir, kaynak sunucunuzun yalnızca OPTIONS isteğini kabul etmesi yeterlidir. İstisna: Parola koruması ya da IP izin listesi olan bir kuralda edge, geçirmediği preflight isteğini kendisi 401 ya da 403 ile yanıtlar.
Kural her yanıta aynı değeri ekler: * ya da https://app.example.com gibi tek bir origin. Birden fazla origin'e izin vermek için uygulamanız eşleşen origin'i Vary: Origin ile birlikte göndersin; Access-Control-Allow-Origin başlığını kurala eklemeyin. Çerez ya da başka kimlik bilgisi taşıyan istekler * değil, adı yazılmış bir origin ister.
Önce tarayıcının ağ panelinde başarısız isteğin durum koduna bakın. X-MT-Blocked-By: cdn-edge-security taşıyan bir 403 edge'den gelir: isteği WAF loglarında bulun, metodu listede yoksa İzin verilen HTTP metotları altında ekleyin. Diğer 4xx ve 5xx yanıtları varsayılan olarak kuralın başlıkları olmadan gelir; önce o yanıtı düzeltin. always ile biten bir satır, örneğin Access-Control-Allow-Origin https://app.example.com always, kaynak sunucunuzun 4xx ve 5xx yanıtlarına da eklenir. Ardından tek bir Access-Control-Allow-Origin geldiğini ve bunun şema dahil istek yapan siteyle eşleştiğini kontrol edin.
Site geneli WAF açıkken Güvenlik sayfasını açın, metotları İzin verilen HTTP metotları altında işaretleyin ve Kaydet'e basın; değişiklik 1-2 dakika içinde yayılır. Yayınlama Kuralları'nın Güvenlik sekmesindeki İzin verilen istek metotları bağlantısı aynı kartı açar. OPTIONS işaretli kalsın: tarayıcılar preflight için bu metodu gönderir.