Common Gateway Interface (CGI) Hakkında;
CGI’ ın ne olduğunu anlatmaya geçmeden önce bazı kavramların açıklanması gerekmektedir. Buna Web Server ve Client ile başlamak yerinde olur. Web Server’ lar (HTTPd Server), Web sayfalarını üzerinde bulunduran makinalardır. Bu makinalar genelde kendi üzerlerinde bulunan Web sayfalarına erişmek için 80 numaralı portu kullanırlar. Client ise, Web Server’ lar üzerindeki Web sayfalarına erişmek isteyen makinalardır. Client herhangi bir porttan Web Server ile iletişim kurabilir. Stdin standard input’ un kısaltılmışıdır ve server açısından client’ ın server’ a gönderdiği veriler anlamına gelir. Stdout standard output’ un kısaltılmışıdır ve server’ ın client’ ın gönderdiği verileri işlemesi sonucunda client’ a gönderdiği sonuç bilgisi anlamına gelir.
Yukarıdaki açıklamalardan da anlaşıldığı gibi, HTTP protokolü, server’ dan client’ a ve client’ tan server’ a veri aktarımını destekler. Client’ ın server’ a veri gönderebilmesi, formlar aracılığıyla olur. Form, client’ ın server’ a veri ulaştırmasını sağlamak amacıyla HTML dili kullanarak yazılmış Web sayfalarıdır. Kullanıcının (client) form aracılığıyla server’ a gönderdiği bilgiyi işleyecek server tarafında çalışan bir programa ihtiyaç vardır. Bu programa gateway programı denir. CGI (Common Gateway Interface), client’ ın gönderdiği input verileri alıp, gateway programına veren (gateway programının çalışmasını sağlayan) ve programın çıktısını tekrar client’ a ileten, kısaca server ve server tarafındaki gateway programları arasında iletişimi sağlayan, bir arayüz, protokoldür.
Bir Web Client programının (Web browser), HTTP server’ ına veri göndermesini sağlamak için hazırlanan formlar, HTML diliyle aşağıdaki gibi başlar:
<FORM ACTION=”URL” METHOD=get | post>
…..
…..
</FORM>
Action seçeneğinde belirtilen URL, formun doldurulduktan sonra, hangi Web server’ daki hangi program tarafından işleneceği bilgisini ifade eder. Method seçeneği ise, formun Web server’ ına hangi methodla ulaştırılacağını belirtir. Yukarıdan da anlaşılacağı gibi, formdaki bilgiler iki methodla ulaştırılabilir. Get metodu kullanılırsa, veri çevresel değişkenler aracılığı ile, Web Server’ a ulaştırılır. Bu metodla bütün form bir query_string değişkeninin içine konur, action kısmında belirtilen adres ve programın sonuna eklenir ve tek bir URL olarak gönderilir.
http://bla.bla.edu./stuff/program?query_string
Veri büyüklüğü sınırlandırılmıştır. Bu yöntem kullanıldığı zaman, actionda belirtilen URL önce decode edilmelidir, çünkü form doldurulup, submit edildiğinde, browser bütün bilgiyi URLencode eder. Decode işlemi bir CGI script (gateway programı) ile yapılabilir. Yukarıda submit edilen URL incelendiğinde, soru işaretine kadar olan kısmın, formun action kısmında yer alan adres ve program olduğu görülür. Soru işaretinden sonraki kısım ise, gönderilen verilerin yer aldığı değişkendir.
Post metodu kullanıldığında ise, CGI veriyi stdin olarak, alır ve bütün çevresel değişkenlere gerekli atamaları yapar. Veri üzerinde herhangi bir büyüklük sınırlaması yoktur.
Verinin gateway programı tarafından işlendikten sonra, client’ a geri gönderilmesine gelince; çıktılar MIME çıktıları, redirection ve nonparsed Headings olmak üzere üç şekilde gönderilebilir. Sadece MIME çıktılara genel olarak bakalım: Çıktının MIME type gönderilmesi, herhangi bir Web sayfası, ses veya video dosyası ya da sade text olması demektir. Gateway programı, standard output’ un MIME tipini belirten başlık mesajlarını koymak ve altına bir de boş satır bırakmak zorundadır. Örneğin;
Content-type: MIME type (text/html)
Data…
Data…
Bir gateway’ in kullanım amaçları çok çeşitli olabilir. Bir örnek vermek gerekirse; bir Web server üzerindeki bir veri tabanı üzerinde, bir bilginin, verilen bir keyword aracılığıyla araştırılması bir gateway programıyla halledilebilir. Bir gateway programı herhangi bir programlama diinde yazılabilir. Fakat, bir gateway yazmak için en çok tercih edilen programlama dilleri şunlardır: C, C++, Fortran, Perl, TCL, herhangi bir Unix Shell, Visual Basic, AppleScript. Script diliyle yazılmış programların kendileri server’ a konur, diğer dillerde yazılmış programların ise derlenmiş hali server’ a konur. Derlenmiş hali server’ a konan programların source kodları da bilgi amacıyla genelde konur.
CGI real time çalıştırılır, yani client ne zaman çalıştırmak isterse, CGI bu isteği alır, verileri çevresel değişkenlere aktararak gateway’ e gönderir ve gateway’ i çalıştırmaya başlar ve çıktı programın çalışması bitince, CGI tarafından alınıp, client’ a gönderilir.
Gateway’ lerin server’ a konması için iki yol
izlenebilir: Bunlardan birincisi, herkes kendi dizini altına programını
koyar ve bir de hangi uzantılı dosyaların server tarafından cgi olarak
kullanılacağının server’ a bildirilmesi için bir .htaccess dosyası
hazırlar. Fakat, bu yöntem pek tercih edilmez, çünkü güvenli gateway
programı yazmak kolay bir iş değildir. Gateway’ ler real time
çalıştırıldığından, kötü niyetli kişiler, gateway’ I server’ I zor durumda
bırakacak şekilde kullanabilirler. Bunu engellemek için, gatewayler server
üzerinde ayrı bir dizin altında tutulurlar. (cgi-bin dizini) Gateway
programları, bu dizine sadece Webmaster’ ların bilgisi ve izni dahilinde
konulabilir.
http://www.tubitak.gov.tr/tubitak_content_files/bilisim/web/html/8.htm