HTTP - Hypertext Transfer Protocol

HTTP - Hypertext Transfer Protocol

HTTP, Web'i güçlendiren bir haberleşme protokolüdür. Ayrıca TCP yığınının (stack) da en tepesindedir.

HTTP'nin yapısı

Modül, içinde protokol, talepler (requests) ve cevaplar (responses) barındırır. Aslında JavaScript, http.ServerRequest ve http.ServerResponse yapıcılarının (constructors) nesnelerinden ibarettir.

Başlıklar (Headers)

Kolayca görebileceğiniz gibi HTTP, IRC ile aynı tarzda bir protokoldür. Amacı, belgelerin değişimine olanak sağlamaktır. HTTP, başlıkları kullanarak talep ve cevapların, değişik haberleşme konuları ve içerik hakkında haberdar olmalarını sağlar. Çok basit bir örnek olarak bir metin, HTML, XML, JPEG vb. tipte dosyaları içerebilir. Gönderilen içeriğin tipi, Content-Type adlı çok bilinen başlık sayesinde gönderilir.

Bağlantılar (Connections)

TCP sunucu gerçekleştirimiyle HTTP sunucu yapısını karşılaştırdığınızda, şüphesiz pek çok benzerlik ortaya çıkar. Her iki durumda da createServer çağrılır ve her iki durumda da bir istemci (client) bağlandığında bir geri çağırma (callback) alınır. Öte yandan temelde büyük bir fark vardır. Net sunucusunda, bir bağlantı (connection) elde edilir. HTTP sunucudaysa elde edilen, talep (request) ve cevap (response) nesneleridir.
HTTP server, yüksek düzeyli (high-level) bir API'dir (Application Program Interface - Uygulama Programı Arayüzü). HTTP protokolünden alınan özel tipteki işlevsellikleri ve davranışları gerçekleştirme olanağı sağlayan araçlar sunar.

Basit Bir Web Sunucu

Node.js'in en ilginç özelliklerinden biri, hiç şüphesiz event-based programming (olaya dayalı programlama) özelliğidir. Bu özellik JavaScript'te, istemci (client) tarafında vardı. Node.js ile server (sunucu) tarafına da aktarılmıştır. Node.js ile bir HTTP sunucusu oluşturmak için, HTTP kütüphanesine (library) ihtiyaç bulunmaktadır. Bir HTTP sunucusunu aşağıdaki şekilde çağırabiliriz:

var HTTP_SUNUCU = require("http");  
HTTP_SUNUCU.createServer(function(request,response){}).listen(8080);


8080 portunda bir olay (event) tetiklendiği zaman, ilk argüman (request) faaliyete geçer. Request nesnesi, porttan gelen taleple ilişkili tüm bilgiyi saklar. Örneğin; bir URL stringini de içerir. Response nesnesi ise sunucudan verilecek cevabı ya da reaksiyonu yönetir.
Aşağıdaki kodda, örnek bir sunucu çalıştıracağız. Çalıştıracağımız sunucunun bileşenlerini tanımlayacağız ve ardından belirleyeceğimiz porttan sunucuyu çalıştıracağız. İçeriği plain/text şeklinde "Turkcell Gelecegi Yazanlar" olarak tanımladığımız için, tarayıcıda göreceğimiz çıktısı “Turkcell Gelecegi Yazanlar” şeklinde olacak. Cevabın statü kodunuysa 200 olarak tanımlayacağız. Her şey yolundaysa bize 200 olarak dönecek.
Aşağıdaki kodu bir Node.js belgesi oluşturun ve içine yazın.

var  HTTP_SUNUCU = require("http");  
HTTP_SUNUCU.createServer(function(request,response){  
    console.log("ILK SERVER DENEYI");  
    response.writeHeader(200, {"Content-Type": "text/plain"});  
    response.write("Turkcell Gelecegi Yazanlar");  
    response.end();  
}).listen(8080);  
console.log("SUNUCU 8080  PORTUNDA CALISIYOR");

Kodu,

node dosyaismi.js

komutuyla çalıştırın. Aşağıdaki çıktıyı elde edeceksiniz:

> SUNUCU 8080  PORTUNDA CALISIYOR

Tarayıcınızda, sunucuyu çalıştırdığınız adresi (127.0.0.1:8080) girdiğinizde aşağıdaki sonucu elde edeceksiniz:

Sunucuya Gelen İstemci Miktarını Saymak

Aşağıda, yine basit sayılabilecek bir sunucu uygulamasında, sunucuya gelen istemciler bir sayaç ile sayılmaktadır. Bununla ilişkili Node.js kodu şu şekildedir:

var http = require('http');
var port = process.env.PORT || 8000;

var SAYAC = 0;

http.createServer(function (req, res) {
 
  SAYAC = SAYAC+1;

var path = req.url;
console.log("ISTEM=" + path + " SAYAC=" + SAYAC);
res.writeHead(200, {'Content-Type': 'text/html'}); 

if (path == "/") {
res.end("MERHABA ISTEMCI # " + SAYAC + ".<br><a href='/sayfa2'>sayfa 2</a>\n");
} else if (path == "/sayfa2") {
res.end("sayfa 2" +".<br><a href='/'>geri</a>\n");
}

}).listen(port);

console.log('Server http://127.0.0.1:' + port);

Daha sonra,

node deneme.js

komutuyla programı çalıştırın. Tarayıcınızda 127.0.0.1:8000 adresine girin. Karşınıza, aşağıdaki sayfa gelecek:

Sayfa 2'yi tıkladığınızdaysa, aşağıdaki sayfa gelecek:


Geri ifadesini tıklayınca da aşağıdaki sayfaya erişeceksiniz:

Konsolda görünecek çıktılarsa şöyle:

Server http://127.0.0.1:8000
ISTEM=/ SAYAC=1
ISTEM=/sayfa2 SAYAC=2
ISTEM=/ SAYAC=3

Modül (Module) Oluşturmak

Yapmanız gereken ilk şey, oluşturacağınız projenin içinde faaliyetini sürdüreceği bir dizin (directory) oluşturmak ve bir package.json dosyası hazırlamaktır. package.json dosyası, projenizin detaylı bilgilerini, bağımlılıklarını ve kullandığı paketleri içerir.
{
 "name":"http-form",
 "description":"FORMLARI İŞLEYEN BİR HTTP SUNUCUSU",
 "version":0.0.1"
}

Formu yazdırmak

Şimdi oluşturacağınız formu ve mesajı yazdırmak için, aşağıdaki kodu, frm.js adı ile oluşturun.

var http = require('http');
var url = require('url');
http.createServer(function (req, res) {

  var URL_BILESEN = url.parse(req.url, parseQueryString=true);

  if (URL_BILESEN.query.KULLANICI_ADI) {
    var name = URL_BILESEN.query.KULLANICI_ADI;
    res.end(name);
  }else{
    var sayfa =
    '<!DOCTYPE html>'+
    '<form>' +
    '<input id=KULLANICI_ADI name=KULLANICI_ADI placeholder="ADI GIR" gerekli>'+
    '<button type=submit>GIR</button>'+
    '</form>';

    res.end(sayfa);
  }
}).listen(8080, "127.0.0.1");

Sonra,

node frm.js

 komutunu çalıştırın. Karşınıza aşağıdaki mesaj gelecek.

Ayrıca web sunucunuzda 127.0.0.1:8080 komutunu girin. Bu kez karşınıza aşağıdaki form gelecek.
Burada adınızı girin ve GIR düğmesine tıklayın.
Karşınıza aşağıdaki sonuç çıkacak:


Yorumlar

Bu blogdaki popüler yayınlar

İç İçe Döngüler

CSS Bir Elemanın Genişliği ve Yüksekliği

JavaScript Dilinde Fonksiyon Çağırma Teknikleri