HTTP sunucu/istemci mimarisi ve durumsuz(stateless) bir yapı kullanarak sunucu ile istemci arasında güvenilir bir TCP/IP bağlantısı üzerinden mesajlaşmaya uygun bir ortam oluşturur.
Bir HTTP istemcisi sunucu ile arasındaki bağlantıyı kurarak bu bağlantı üzerinden mesaj(lar) gönderen ve alan bir uygulamadır. Örnek olarak Mozilla Firefox ve Google Chrome verilebilir.
Bir HTTP sunucusu ise istemci tarafından gelen istekleri cevaplamak üzere bağlantı isteğini kabul eden bir uygulamadır. Genellikle Web Sunucuları örneğin Apache veya IIS vb sunuculardır.
HTTP hangi kaynak için bağlantı istendiğini URI üzerinden belirler. Bağlantı kurulduktan sonra , HTTP mesajları e-posta[RFC5322] ve MIME[RFC2045] mesaj biçimlerine benzeyen bir biçimde gönderilir.
Bu mesajlar istemciden sunucuya istek(request) ve sunucudan istemciye cevap(response) olarak aşağıdaki şekilde biçimlendirilir.
HTTP-message = <Request> | <Response> ; HTTP/1.1 messages
HTTP istek ve cevap mesajları veriyi taşımak için genel bir mesaj biçmi kullanır[RFC822]. Bu genel mesaj biçmi aşağıdaki bilgileri içerir
- Başlangıç satırı (A Start-line)
- Sıfır veya daha fazla başlık alanı, CRLF karakteri ile sonlandırılır (Zero or more header fields followed by CRLF)
- Bir boş satır (önceki CRLF karakteri arkasından birşey eklenmeden başlıkların bittiği belirtilir.)
- İsteğe bağlı mesaj metni/gövdesi (Optionally a message-body )
İlerleyen bölümlerde HTTP mesaj için gerekli her parça anlatılacaktır.
Mesaj Başlangıç Satırı
Bir başlangıç satırı aşağıdaki genel yazım şeklini kullanmalıdır.
start-line = istek satırı | durum satırı
İstek satırı ve durum satırı olarak isimlendirilen kısımlar ayrıca istekler ve cevaplar bölümlerinde detaylandıracaktır.
Şimdilik sadece aşağıdaki başlangıç satırı incelenebilir.
ÖRNEK
GET /merhaba.html HTTP/1.1 (istemci tarafından gönderilmiş istek satırı(request-line)) HTTP/1.1 200 OK (sunucu tarafından gönderilmiş cevap-satırı(response-line))
Başlık Alanları
HTTP başlık alanları istek, cevap veya iletilen mesaj gövdesi için gerekli olan bilgileri içerir. 4 çeşit HTTP başlığı vardır.
- Genel Başlık (General Header): Bu tür alanlar hem istek hem de cevap mesajlarına uygulanabileceği için daha genel bir uygulanabilirliği vardır.
- İstek Başlığı (Request Header): Bu tür alanlarsadece isteklere uygulanabilir
- Cevap Başlığı (Response Header): Bu tür alanlar sadece cevaplara uygulanabilir
- Varlık Başlığı (Nasıl çevireceğimi bilemedim) (Entity Header) : Bu tür başlık alanları yapısal bilgileri barındırır. Eğer mesaj gövdesi varsa gövde için yoksa çalışılan kaynak(resource) için olabilir.
Yukarıda belirtilen bütün başlık alanları aynı yazım şeklini kullanır. Önce alanın adı, iki nokta üstüste(:), daha sonra değer bilgisi.
Aşağıda birkaç farklı örnek bulabilirsiniz.
Örnek
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com Accept-Language: en, mi Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain
Mesaj Gövdesi
Mesaj gövdesi HTTP için isteğe bağlıdır, şayet bulunuyorsa, istek ve cevap için mesajı(entity-body) taşımak için kullanılır. Eğer mesaj gövdesi varsa genellikle Content-Type ve Content-Length başlıkları ile gövde hakkında bilgi verilir.
Bir mesaj gövdesi HTTP istek ve cevapları için veriyi taşıyan bölümdür(form verisi, upload/download gibi). Aşağıda basit bir mesaj gövdesi örneği bulabilirsiniz.
<html> <body> <h1>Hello, World!</h1> </body> </html>
Önümüzdeki iki bölüm HTTP istek ve cevap kavramlarını inceleyecektir.