ana sayfa : araştırma : uzaktan web tasarımı : cgi [ 2 / 5 ] 

GERİ

İnteraktif Web Sayfaları

 

CGI programcıkları Web sayfalarını interaktif yapabilmek için de mekanizma sağlar. HTML içindeki <FORM> tag(im)’ını kullanarak sayfayı görüntüleyen kullanıcıdan direk bilgi almak mümkündür. İşte bu bilgiler direk bir CGI programcığına yollanarak işlenebilmektedir. Örneğin ana sayfa içine site içindeki diğer sayfa adreslerini içeren bir açılır liste konur. Kullanıcı buradan sayfa ismini seçer bu bilgi CGI programcığına aktarılır. CGI programcığı da bunu gözatıcıya yollar.

Bülten panoları da CGI programcıklarıyla web sayfalarını interaktif yapmaya diğer bir örnektir. Programcıklar yazarak uzaklardan önceden yollanmış mesajların gösterilmesini ve yeni mesajlar yollanabilmesini sağlamak mümkündür.

İşte CGI bütün bunları ve daha fazlasını sunar. Tek engel sizin programcılık yeteneklerinizin kısıtlılığıdır. Eğer göstermek istediğiniz veriyi HTML formatına dönüştürmek isterseniz CGI programcıkları kullanın.

 

Cgı’nın Bileşenleri

 

Birinci bölüm CGI’nın ne olduğunu ve World Wide Web yayınlarında nasıl kullanılacağını açıkladı. Bu bölüm ise Web sunucusu ile CGI programcıkları arasındaki veri alış-verişini anlatıyor. Bu bölümde ihtiyaç duyulan veriyi bulmayı ve programcık sonuçlarını geri Web sunucuya döndürmeyi bulacaksınız. Hatta CGI programcıklarının sonucu olan veriyi sunucuyu pas geçerek direk Web gözatıcıya yollamayı öğreneceksiniz.

Hatırlanacağı gibi CGI, Web gözatıcısı/sunucusu ile CGI programcıkları arasında veriyi almayı-vermeyi basitleştiren bir yapıya sahipti. Bu bölüm CGI programcıkları yazabilmenin tüm araçlarını sunmaktadır. Şimdi Web sunucunun CGI programcıklarına veriyi nasıl aktardığı sonra da sonuçları Web gözatıcıya nasıl yolladığı ile başlayalım.

 

Programcıklara Verinin Aktarılması

 

Web sunucudan gerekli olan verinin programcıklar tarafından alınması içn çok fazla bir şey yapmaya gerek yoktur. Zaten Web sunucu CGI programcığını her çalıştırışında bunu CGI tanımlar. İlişkin verinin tamamı Web gözatıcı tarafından sunucuya yollanır. Örneğin form girişi, ek olarak HTTP istek başlıkları (header) sunucu tarafından CGI programcığına ya çevresel değişkenler içinde ya da standart giriş (stdin) aracılığıyla yollanır. Standart giriş, programcığın girişleri aldığı varsayılan yerdir. Bu iş sizin için yapılmaktadır, sizin tüm yapmanız gereken gerekli bilgiyi nerede arayacağınızı bilmektir.

 

Çevresel (Ortam) Değişkenler

 

Bir Web gözatıcısı bir Web sunucusundan CGI programcığı isteğinde bulunduğu zaman sunucu bağımsız çevresel adı verilen birşeyin içinde programcığı başlatır. Bu CGI programcığı kendi halinde veya çevreselinde çalışıyor anlamına gelir. Bu web sunucunun altında çalışan ortam değişkenlerinden miras kalan değerler değildir. Bu önemlidir çünkü bir çok web gözatıcısı aynı anda aynı CGI programcığını isteyebilir ve web sunucu aynı programcığın bir çok kopyasını başlatabilir.  Aynı zamanda çalışan programcığın her versiyonu diğer tüm programcıklardan bağımsız olarak çalışmalıdır, aksi halde karışıklıklar meydana gelebilir. Çünkü web sunucu sizin CGI programcığınız için yeni bir çevresel ayarlar, çevresel değişkenlerdeki hemen tüm bilgileri sizin CGI programcığınıza yerleştirir. Aşağıdaki tablo ortam değişkenlerini göstermektedir.

Tablo 1-CGI Ortam Değişkenleri

 

Değişken

Anlamı

AUTH_TYPE

Web gözatıcıyı geçerli kılmak için kullanılan onay yöntemini içerir.

CONTENT_LENGTH

Web gözatıcısı yoluyla yollanan, CGI programcığını isteyen Web sayfasında kullanıcının sağladığı içeriğin uzunlunu bayt olarak depolar.

CONTENT_TYPE

CGI programcığı için gözatıcı isteğine eşlik eden verinin türünü depolar. Bu bilgi text/html veya image/jpeg olabilir.

GATEWAY_INTERFACE

Kullanılan CGI versiyonunu depolar. örneğin CGI 1.1 kullanılıyorsa depolanan bilgi CGI/1.1 şeklinde olur.

PATH_INFO

CGI programcığı için ek yol bilgisini depolar. Bu genellikle CGI programcığının kullanacağı dokümanın kökünde bulunan başka bir dokümana olan sanal yoldur.

QUERY_STRING

İstek yöntemi GET olduğununda kullanıcının sağladığı bilgiyi içerir. Bu bilgi URL referansının hemen sonuna bir soru işareti ile eklenir. http://www.robertm.com/cgi-bin/answer.pl?state=CA URL’sinde "state=CA" ifadesi  QUERY_STRING ortam değişkeninde tutulur.

REMOTE_ADDR

CGI programcığını isteyen Web gözatıcının çalıştığı mankinenin IP adresini depolar.

REMOTE_HOST

CGI programcığını isteyen Web gözatıcının çalıştığı mankinenin etki alanı (domain) adını depolar. Bu bilgi kullanılamaz durumdaysa REMOTE_HOST ayarlanamaz.

REMOTE_IDENT

Eğer Web sunucu tanımlamayı destekliyorsa kullanıcının login ismini depolar.

REMOTE_USER

Web sunucunun giriş onayı için tanımladığı kullanıcı adını depolar. Bu yalnızca CGI programcığı korumalı ve sunucu giriş onay desteğine sahipse ayarlanabilir.

REQUEST_METHOD

CGI programcığı istemekte kullanılan istek yöntemini içerir. Bu, GET, HEAD, POST, PUT  gibi geçerli HTTP istek yöntemlerinden biri olabilir.

SCRIPT_NAME

CGI  programcığının sanal yolunu ve adını depolar.

SERVER_NAME

Web sunucunun çalıştığı makinenin ya etki alanı adını ya da IP numarasını depolar.

SERVER_PORT

Web gözatıcının Web sunucuya yaptığı istek port numarasını depo eder.

SERVER_PROTOCOL

CGI programcığı için yapılan istekte kullanılan protokol adını ve versiyon numarasını saklar. Çoğu durumda bu HTTP/1.0 şeklinde bir bilgidir.

SERVER_SOFTWARE

CGI programcığını çalıştıracak olan sunucu yazılımının adını ve versiyon numarasını saklar. Eğer bu yazılım Netscape Communications Server version 1.1 ise değişkende saklanan bilgi Netscape-Communications/1.1 olacaktır.

 

CGI ortam değişkenlerine ek olarak Web sunucu web gözatıcısından alınan tüm HTTP istek başlıklarını kullanılabilir yapar. Aşağıdaki tablo HTTP istek başlık ortam değişkenlerini göstermektedir.

Tablo 2-HTTP İstek Başlığı Ortam Değişkenleri

 

HTTP İstek Başlığı

Anlamı

HTTP_ACCEPT

Contains a comma-separated list of media types the browser can accept in response from the Web server. Examples are audio/basic, image/gif, text/*, */*. The last two examples contain the wildcard *, which is a stand-in for any string of characters. text/* means that all forms of text can be accepted; */* means that the browser will accept any content type.

HTTP_ACCEPT_ENCODING

Contains the valid encoding methods the browser can receive in response from the Web server. Examples are x-zip, x-stuffit, and x-tar.

HTTP_ACCEPT_LANGUAGE

Contains the browser's preferred language for a response from the Web server. However, responses in any language not specified in this variable are allowed. An example is en_UK, which is the English of the United Kingdom.

HTTP_AUTHORIZATION

Contains authorization information from the Web browser. Its value is used for the browser to authenticate itself with the Web server. There is not a single specific format for possible values of this field, and new formats may be added. One example is the user/password scheme, where the value, in my case, would be user robertm:mypassword.

HTTP_CHARGE_TO

Formats for this field are still undetermined. However, it is available to contain information for the account that is to be charged for the costs of receiving the requested data.

HTTP_FROM

Contains the name of the requesting user as supplied by the Web browser in an e-mail address format. Some examples are robertm@deltanet.com and rmcdanie@primenet.com.

HTTP_IF_MODIFIED_SINCE

Can contain a value specified in a valid ARPANET date standard, such as Weekday, DD-Mon-YY HH:MM:SS TIMEZONE. This field can be used in conjunction with the GET method to return the requested document only if it has changed since the date specified.

HTTP_PRAGMA

Holds the value of any special directives for the Web server. For instance, a proxy Web server has one valid value for a pragma request header, no-cache, which means that the proxy server should always request the document from the real Web server instead of returning a nonexpired cached copy.

HTTP_REFERER

Contains the URI (uniform resource identifier, which is a superset of URLs) of the document that contained the link to the currently requested document. An example would be http://www.thepalace. com/web-pages.html.

HTTP_USER_AGENT

Contains the name of the Web browser software that requested the document. An example is Mozilla/2.0 (Win95; I), which would be the user agent for the Netscape 2.0 browser for Windows 95.

 

Aşağıda birçok ortam değişkeninin kullanıldığı bir CGI programcığı görülmektedir. Liste 1 bunu göstermektedir.

Liste 2-Ortam Değişkenlerini Gösteren Bir Programcık

#!/usr/local/bin/perl

print "Content-type: text/html\n\n";

print "AUTH_TYPE = $ENV{'AUTH_TYPE'}<BR>\n";

print "CONTENT_LENGTH = $ENV{'CONTENT_LENGTH'}<BR>\n";

print "CONTENT_TYPE = $ENV{'CONTENT_TYPE'}<BR>\n";

print "GATEWAY_INTERFACE =

       $ENV{'GATEWAY_INTERFACE'}<BR>\n";

print "PATH_INFO = $ENV{'PATH_INFO'}<BR>\n";

print "PATH_TRANSLATED = $ENV{'PATH_TRANSLATED'}<BR>\n";

print "QUERY_STRING = $ENV{'QUERY_STRING'}<BR>\n";

print "REMOTE_ADDR = $ENV{'REMOTE_ADDR'}<BR>\n";

print "REMOTE_HOST = $ENV{'REMOTE_HOST'}<BR>\n";

print "REMOTE_IDENT = $ENV{'REMOTE_IDENT'}<BR>\n";

print "REMOTE_USER = $ENV{'REMOTE_USER'}<BR>\n";

print "REQUEST_METHOD = $ENV{'REQUEST_METHOD'}<BR>\n";

print "SCRIPT_NAME = $ENV{'SCRIPT_NAME'}<BR>\n";

print "SERVER_NAME = $ENV{'SERVER_NAME'}<BR>\n";

print "SERVER_PORT = $ENV{'SERVER_PORT'}<BR>\n";

print "SERVER_PROTOCOL = $ENV{'SERVER_PROTOCOL'}<BR>\n";

print "SERVER_SOFTWARE = $ENV{'SERVER_SOFTWARE'}<BR>\n";

print "HTTP_ACCEPT = $ENV{'HTTP_ACCEPT'}<BR>\n";

print "HTTP_ACCEPT_ENCODING =

       $ENV{'HTTP_ACCEPT_ENCODING'}<BR>\n";

print "HTTP_ACCEPT_LANGUAGE =

       $ENV{'HTTP_ACCEPT_LANGUAGE'}<BR>\n";

print "HTTP_AUTHORIZATION =

       $ENV{'HTTP_AUTHORIZATION'}<BR>\n";

print "HTTP_CHARGE_TO = $ENV{'HTTP_CHARGE_TO'}<BR>\n";

print "HTTP_FROM = $ENV{'HTTP_FROM'}<BR>\n";

print "HTTP_IF_MODIFIED_SINCE =

       $ENV{'HTTP_IF_MODIFIED_SINCE'}<BR>\n";

print "HTTP_PRAGMA = $ENV{'HTTP_PRAGMA'}<BR>\n";

print "HTTP_REFERER = $ENV{'HTTP_REFERER'}<BR>\n";

print "HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'}<BR>\n";

Eğer bu programı hemen çalıştırmak isterseniz listenin en başındaki #!/usr/local/bin/perl ifadesi Windows platformunda kullanılmamalıdır.