GET vs POST – Kullanim Durumlari
HTML belirtim belgelerinde yazilana gore POST ve GET arasindaki en temel fark. GET metodu kullanildiginda bir formun
verileri URL bilgisi icerisinde kodlanmasi, POST metodunda istemin mesaj kisminda tutularak gonderilmesidir.
Belirtim ayni zamanda bahsi gecen bu metodlarin kullanim durumlari icin de bir oneri getirmektedir. Oneriye gore bilgi getirme islemleri icin(veri okuma) GET kullanilmali, bunun disindaki islemler icin ise (guncelleme, ekleme, siparis verme, e-posta gonderme vb.) POST metodu kullanilabilir.
Yukaridaki ifadeye gore, form gonderme islemimiz şayet sadece kullanicin ekraninda bir degisiklik yaratacaksa, baska bir deyisle, veritabaninda ya da diger kaynaklarda herhangi bir degisiklige sebep olmayacaksa GET kullaniriz. Ornek olarak, bir kutuphane otomasyonunda, form icerisinde girilen Yazar’in kitaplarinin getirilmesi işlemi veritabanimizda sadece okuma işlemi yapiyorsa GET kullanabiliriz.
Peki neden boyle bir ayrima gidilmis? POST yerine GET, GET yerine POST kullanmak mumkun iken farkli kullanim durumlari olusturulmus? Aslinda yine ornek bir senaryodan yola cikalim ve bir su dagitim firmasinin sitesinden 1 tane su siparis verdigimizi dusunelim. Sipariş onaylanmiş ve su firmasi adresimize bir adet suyu gonderiyorken, tarayicinin geri tusuna basip karsimiza gelen siparis formunu hatayla tekrar submit ettigimizi varsayalim. Bu durumda tarayicinin bize bir uyari mesaji sundugunu goruruz cogu zaman.Bu mesajda bize “POST isteminin yeniden gondermek istediginizden emin misiniz?” benzeri bir soru yoneltir.”Evet” deyip devam edersek yeni siparis gonderilmis olacak.Obur taraftan durumun farkinda olan bir kullanici “hayir” diyerek siparisin gonderilmesini iptal edebilir.
Tarayicinin yaptigi iş aslinda, POST istemlerinde kullaniciyi uyaran, hatali islemlere sebep olacak kullanimlardan kullaniciyi haberdar etmek adina yukarida bahsedilen mekanizmayi kullanmaktir. Ayni mekanizma GET icin gecerli degildir. Cunku en basta bahsettigim gibi, GET dis kaynaklarda bir degisiklige yol acmayacak istemler olarak ele alindigindan kullaniciyi uyarmaya gerek gorulmez. Şayet su firmasinin webmasteri POST yerine GET kullanmis olsaydi hicbir uyari gormeden yukaridaki senaryoda ust uste su siparisi verecektik.
POST ve GET arasindaki teknik farklara goz atacak olursak da:
POST
1. Varsayilan oılarak veriler önbellekte(cache) tutulmaz.Veriler her zaman web sunucusundan cekilir.
2. Veri uzunlugu ile ilgili bir kisitlama yoktur. Daha dogrusu web sunucusuna baglidir.
3. Karakter kodlamasi application/x-www-form-urlencoded olarak kolayca yapilabilir.
4. CGI sunucularinda, gelen parametreler STDIN kanalindan okunur.
GET
1.Veriler önbellekte saklanir.
2.Tarayiciya gore degisen maksimum URL uzunluguna gore gonderilebilecek veri uzunlugu bellidir.
3.CGI sunucularda, gelen parametreler QUERY_STRING degiskeni üzerinden okunur.
Özet olarak
- Dış kaynaklarda degisiklige yol acacak durumlarda(veritabaninda degisiklik vb.) POST kullanmali.
- Veri uzunlugu fazla ise POST kullanmali
- Verilerin önbellekte saklanmasini istiyorsaniz GET kullanmali.
- Guvenlik soz konusu ise(Kredi karti numarasi vs.) ve önbellekte durmasini istemiyorsaniz POST kullanmali
- Parametrelerin URL kisminda gorunmesini istemiyorsaniz POST kullanmali
Son olarak, genelde GET metodunun POST metoduna gore daha hizli calistigini(tarayici faktoru vardir) ve yukaridaki kullanim durumlarina gore POST gerektirmeyecek durumlarda GET kullanmanın performansi arttirdigini soylemek istiyorum.
bir yorum yazın