Web geliştirmede güvenlik her zaman en öncelikli konulardan biridir. Modern web uygulamalarında sıkça güvenliği yükseltme amacıyla sıkça kullanılan bir yöntem olan “preflight” istekler hakkında konuşmak yazmak istiyorum bu makaleyi. Preflight isteği, Cross-Origin Resource Sharing (CORS) mekanizması kapsamında tarayıcı tarafından gerçekleştirilen bir süreçtir. Peki bu süreç nasıl işler?
Temelde tarayıcı gerçek bir HTTP isteğini göndermeden önce, hedefin bu isteği kabul edip etmeyeceğini kontrol etmek amaçlı ilerlettiği bir süreçtir. Burada önemli olan hedef sunucunun bu isteği kabul edip etmediğidir. Zira, kabul etmeyecek bir sunucuya niçin istek gönderilsin ki?
Bu süreç, asıl isteği göndermeden önce OPTIONS metoduyla Access-Control-Request-Method
ve Access-Control-Request-Headers
headerlarını içeren bir istek göndererek işler. OPTIONS isteğine dönen yanıt da asıl isteğin gönderilip gönderilemeyeceğini belirler.
OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.other
...
Origin: http://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
Origin
headerı, bir sunucuya, tam olarak nereden geldiğini bildirir. Sunucu, kendi içerisindeki CORS politikasına göre isteği kabul edip etmeyeceğine karar verir.
Access-Control-Request headerlarıyla da atacağı asıl isteğin hangi metotta ve hangi custom headerları içereceğini belirtir.
Sunucu, OPTIONS isteğine döndüğü cevabın içerisinde
Access-Control-Allow-Origin
headerıyla hangi originlerden gelen istekleri kabul edeceğiAccess-Control-Allow-Methods
headerıyla hangi metotları kabul edeceğiAccess-Control-Allow-Headers
headerıyla da gelecek olan istekte hangi headerları kabul edeceği
bilgilerini döner.
Bu işlem tarayıcılar (veya postman gibi araçlar) tarafından otomatik olarak gerçekleştirilir. Yani OPTIONS isteğini manuel olarak build etmemize gerek yok. Bunlar gerektiğinde browser tarafından otomatik olarak oluşturulup gerçekleştirilecektir.
Faydalanılan kaynak: Why is my browser sending an OPTIONS HTTP request instead of POST?