Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Bu makalenin farklı dillerde bulunduğu adresler: Turkce  

[Photo de 
l'auteur]
by Charles vidal

Yazar Hakkında:

Chairman of a gastronomical lug in Paris. Yazar, Açık Kod sisteminin ve GNU'nun ardındaki felsefeyi benimsemiştir, çünkü bu felsefe bilgi paylaşımına yardımcı olmaktadır. Yazar ayrıca boş zamanlarında saksafon çalmaktan hoşlanır.

İçerik:

Apache bölüm I

Çeviri : Kaan Erdemir

[Illustration]

Özet:

Bu makale en çok kullanılan web sunucusu olan Apache hakkında olup iki bölüm olarak hazırlanmış tüm anlatımın ilk kısmıdır. Bu bölümde, WWW 'nin kısa bir tarihini tanımlarken ikinci bölümde HTTP protokolüne bir giriş yapacağım.



 

Tarih

HTTP istemci ve sunucusu fikri ilk olarak CERN(Centre Européen de Recherche Nucléaire) çalışanları tarafından geliştirildi.
CERN çalışanları öncelikle projenin araştırma görevini tamamladılar ve onu Amerikan Üniversitesi(NSCA)' ne devrettiler.
Tahminimce, birçok insan için Avrupa'lılar (bilhassa Fransız'lar) tarafından yaratılan WWW'nin temellerini görmek etkileyici olmalı.

Apache, bu ücretsiz WEB sunucusu projesinin ismidir. Apache ismi hafif bir tartışmanın ortasında kalmıştır. Bazıları ismin "a patchy server" 'dan geldiğini iddia ederler çünkü başlangıçta sayısız yama(patch)dan oluşturulmuştur (yine bir hacker taktiği :) ). Diğer bir kesim ise duruma daha ciddi bir hava ile yaklaşmaktadır. Bu kesime göre proje ismi Apache kabilesinden esinlenerek yaratılmıştır. Her durumda ortama yüksek uyum gücüne sahip bir kabile!
Apache şu anda internette en çok kulanılan WEB sunucusudur. O, consortium w3 tarafından standartlaştırılan HTTP protocol (1.1) 'e uyumludur.
1999 'da yapılan bir Net sunucuları araştırması, Apache WEB sunucusunun tüm sunucular içinde %60,05 lik bir kullanım payına sahip olduğunu göstermektedir.
Bir WEB sunucusu sunucu-istemci (anatar-kilit gibi) ikilisinin "sunucu" tarafını oluşturur. Bir sunucu "WEB istemcileri" 'den gelen istemlere yanıt verir. Öreneğin, lynx WEB gezginlerinde olduğu gibi :-).  

HTTP protokolü

Sunucu ve istemci birbirleri ile HTTP protokolü (Hypertext Transfer Protocol) 'nü kullanarak iletişim kurar. Bu protokülün bu günkü son sürümü HTTP 1.1 as specified in RFC 2616 adresinden elde edilir.
Bu protokol iki bölüme ayrılmıştır : istemcinin istemleri ve sunucunun cevapları. Protokol ASCII (American Standart Code For Information Interchange) tabanlıdır.
  1. İstem :

  2. Üç parçaya ayrılmış bir satırlık yazıdır :

    1. [istem tipi]
    2. [URL]
    3. [Kullanılan protokol]
    Bu basit yazı satırını diğer özel istem satırları takip edebilir.

  3. Cevap :

  4. Cevap istem tipine bağlı olarak bir gövde ve bir başlık kısımları olmak üzere oluşturulur.
    
    	    >telnet www.linuxfocus.org 80
    
    	    Trying 213.239.9.21...
    
    	    Connected to nova.linuxfocus.org.
    
    	    Escape character is '^]'.
    
    	    GET / HTTP/1.0 <return>
    
    	    <return>
    
    	    HTTP/1.1 200 OK
    
    	    Date: Mon, 27 Sep 1999 21:23:20 GMT
    
    	    Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)
    
    	    Last-Modified: Sun, 26 Sep 1999 16:40:44 GMT
    
    	    ETag: "4b005-1616-37ee4c8c"
    
    	    Accept-Ranges: bytes
    
    	    Content-Length: 5654
    
    	    Connection: close
    
    	    Content-Type: text/html
    
    	    <PAGE HTML>
    
    	    

    Bu cevap ne diyor?
    Telnet ile bağlanma işlemi tamamlandıktan sonra "GET / HTTP/1.0" istemine cevap verilmeye başlanıyor. İlk satır (HTTP/1.1 200 OK) kullanılan protokolü ve sunucunun dönüş değerini gösteriyor (dönüş değerinin 400 den büyük olması bir hata olduğuna işaret eder). Bu satırı tarih, sunucunun sürüm numarası , URL üzerinde yapılan son değişikliğin tarihi (ki bu tarih istemcinin URL 'de yer alan dosyaların zaten onun cache(gizli saklama bölgesi) inde yer alıp almadığını bilmesini sağlar). "Content-Length" ifadesi gönderilen cevabın uzunluğunu belirtir (benzer şekilde bir CGI (Common Gateway Interface) betiğine yapılacak istemden alınacak cevap böyle bir ifade içermez) ve son olarak "Content-Type" ifadesi istemciye cevap verilirken kullanılan MIME tipini gösterir (text, html, images ...).

    Bu tam olarak bir açıklama sayılmaz. Bazı satırlar hala bende gizli kaldı ;-)
    Şimdi de bir hata durumunda neler olacağına bakalım :
    
    	>telnet www.linuxfocus.org 80
    
    	Trying 213.239.9.21...
    
    	Connected to nova.linuxfocus.org.
    
    	Escape character is '^]'.
    
    	get / HTTP/1.0 <return>
    
    	<return>
    
    	HTTP/1.1 501 Method Not Implemented
    
    	Date: Mon, 27 Sep 1999 21:22:03 GMT
    
    	Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)
    
    	Allow: GET, HEAD, OPTIONS, TRACE
    
    	Connection: close
    
    	Content-Type: text/html
    
    	

    Gördüğünız gibi, başlık "HTTP/1.1 501 Method Not Implemented (HTTP/1.1 metodu yerine getirilemedi)" diyerek durumu yeterince açıkladı zaten ;-)
    HTTP -bu örnekte de gördüğümüz gibi- gerçekten çok basit bir protokoldür.
    
    	>telnet www.linuxfocus.org 80
    
    	Trying 213.239.9.21...
    
    	Connected to nova.linuxfocus.org.
    
    	Escape character is '^]'.
    
    	GET / < return >
    
    	      < return >
    
    	
    [www.linuxfocus.org 'dan gelecek olan index.html 'nin içeriği bu satırların ardından görüntülenecek]..

    Apache sunucusunun içinde neler oluyor ?
    Telnet komutunu kullanarak www.linuxfocus.org (IP adresi 195.53.25.1) 'a 80. port(giriş kapısı diyebiliriz herhalde :) ) 'undan bağlandıktan sonra (port 80 http sunucular için standart port kabul edilir) sunucu her hangi bir istem için beklemeye geçer. GET/ komutu ile beraber iki return(devam-enter) işareti verirsiniz.
    Neden iki return(devam) işareti ?
    İlk return işaretinden sonra verilen son return işareti sunucuya boş bir satır gönderir. Sunucu boş satırı gördüğünde istemin tamamlandığını anlar. Sunucu isteme istek dosyası (index.html) ile cevap verir. TCP/IP bağlantısı istek dosyasını transferinden hemen sonra kapatılacaktır.

    Gördüğünüz gibi, istemci ve sunucu arasında kullanılan dil gerçekten çok basittir ancak HTTP/1.0 sürümü yerine HTTP/1.1 sürümünü kullandığınızda isteminiz için zorluk biraz artacaktır.

    
    GET / HTTP/1.0< return >
    
    < return >
    
    HTTP/1.1 200 OK
    
    Date: Tue, 24 Aug 1999 22:25:11 GMT
    
    Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)
    
    Last-Modified: Sun, 01 Aug 1999 11:50:52 GMT
    
    ETag: "4b005-1462-37a4349c"
    
    Accept-Ranges: bytes
    
    Content-Length: 5218
    
    Connection: close
    
    Content-Type: text/html
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
    ....
    
    
    fakat 1.1 'i kullanmak şu sonuçları verir :
    GET / HTTP/1.1 <return >
    
    < return >
    
    HTTP/1.1 400 Bad Request
    
    Date: Tue, 24 Aug 1999 22:24:59 GMT
    
    Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)
    
    Connection: close
    
    Transfer-Encoding: chunked
    
    Content-Type: text/html
    
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    
    <HTML><HEAD>
    
    <TITLE>400 Bad Request</TITLE>
    
    </HEADBODY>
    
    <H1>Bad Request</H1>
    
    Your browser sent a request that
    
    this server could not understand.<P>
    
    client sent HTTP/1.1 request without hostname (see RFC2068 section 9, 
    and 14.23): </P>
    
    </BODY></HTML>
    
    
    Yeni HTTP/1.1 protokolünü kullanmak daha fazla bilgi alanı kullanılmasını gerektirir. Bu protokol birçok satır üzerinden yapılandırılmaktadır. Bu ilave satırlar daha kesin bilgiler iletilmesini sağlarken diğer yandan iletişimin kalitesini yükseltir.
    İşte bu protokolün 1.1 sürümüdür. Apache takımı titizlikle daha fazla fonksiyonellik sağlayacak yeni özellikler peşindedir. Belgeleme, sanal siteler (aynı IP adresini paylaşan siteler) ve birçokları gibi...

    Örnek :

    
    GET / HTTP/1.0< return >
    
    Host:www.linuxfocus.org< return >
    
    < return >
    
    [...]
    
    
    Bu durum birçok istemci-sunucu çiftinde sorunsuz işlemektedir. Sunucu istemi cevaplarken :  

    Fonksiyonellik

    Ana prensip bir WEB sunucusunun istemciye yalnızca cevap göndermesidir. İstemci istemine karşılık yalnızca cevap görmelidir.

    WEB sunucusu WEB istemcisi ile sorgulanan URL (Uniform Request Locator) arasında bir arayüzdür - bu özet tabiki sunucunun yalnızca URL için kullanılabileceği anlamına gelmez. Ayrıca sunucu URI, URN bulmak içinde kullanılabilir. Aslında basitçe hepsi aynı şeylerdir - ve Apache sunucusu işletim sistemi üzerinde çalışmaktadır.. WEB istemcisi kendi istemlerini gönderir ve sunucuda isteme sunulabilecek uygun bir URL ile cevap verir.

    İstemci tarafından gönderilen bazı istemler bazı durumlarda direkt olarak sunucu tarafından cevaplanmaz. Sunucu istemi bir diğer programa aktarabilir ve programın döndürdüğü dönüş değerini istemciye cevap olarak iletebilir. Bu duruma CGI betikleri örnek olarak gösterilebilir.

     

    Sonuç

    Apache 'nin nasıl çalıştığını anlayabilmek için basitçe başka bir HTTP sunucusuna telnet ile bağlantı yapın. Bu yolla sunucunun döndürdüğü cevaptan sitenin kullandığı sunucunun ismini görebilirsiniz.  

    Bu makale için görüş bildirme formu

    Her makale bir görüş bildirme sayfasına sahiptir. Bu sayfa ile kendi yorumlarınızı iletebileceğiniz gibi diğer okuyucuların yorumlarına da ulaşabilirsiniz :
     Görüş bildirme sayfası 

    Bu WEB sayfaları LinuxFocus Editör Takımı tarafından hazırlanmaktadır.
    © Charles vidal
    LinuxFocus.org 2000

    Linuxfocus 'a hata bildirmek yada bir yorum göndermek için buraya tıklayınız
    Çeviri bilgisi:
    fr -> -- Charles vidal
    fr -> en Frédéric Raynal
    fr -> en Alexandre Abbes

    2000-05-01, generated by lfparser version 1.5