{"id":33754,"date":"2025-11-06T16:23:24","date_gmt":"2025-11-06T13:23:24","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/"},"modified":"2025-11-06T16:23:24","modified_gmt":"2025-11-06T13:23:24","slug":"node-js-ve-http-modulu-temel-kavramlar-nelerdir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/","title":{"rendered":"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?"},"content":{"rendered":"<p><title>Node.js HTTP Mod\u00fcl\u00fc ile Web Sunucusu Olu\u015fturma Rehberi<\/title><br \/>\n<body><\/p>\n<p>G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda her web sitesi, mobil uygulama ve hatta IoT cihaz\u0131, arka planda \u00e7al\u0131\u015fan bir sunucuya ihtiya\u00e7 duyar. Peki, kendi web sunucunuzu s\u0131f\u0131rdan olu\u015fturman\u0131n ne kadar kolay oldu\u011funu hi\u00e7 d\u00fc\u015f\u00fcnd\u00fcn\u00fcz m\u00fc? \u00d6zellikle Node.js ve yerle\u015fik HTTP mod\u00fcl\u00fc ile bu s\u00fcre\u00e7, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden \u00e7ok daha basit ve eri\u015filebilir hale geliyor. Bu kapsaml\u0131 rehberde, Node.js&#8217;in g\u00fcc\u00fcn\u00fc kullanarak kendi web sunucunuzu nas\u0131l ad\u0131m ad\u0131m kuraca\u011f\u0131n\u0131z\u0131, istekleri nas\u0131l y\u00f6netece\u011finizi ve hatta ileri d\u00fczey optimizasyonlar\u0131 nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ke\u015ffedeceksiniz. Haz\u0131r m\u0131s\u0131n\u0131z? Kendi sunucunuzu in\u015fa etme yolculu\u011funa ba\u015flayal\u0131m!<\/p>\n<h2>Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?<\/h2>\n<p>Web geli\u015ftirme d\u00fcnyas\u0131nda sunucular, istemcilerden (genellikle web taray\u0131c\u0131lar\u0131) gelen istekleri dinleyen, i\u015fleyen ve uygun yan\u0131tlar\u0131 geri g\u00f6nderen temel bile\u015fenlerdir. Geleneksel olarak bu t\u00fcr g\u00f6revler i\u00e7in Apache, Nginx gibi \u00f6zel sunucu yaz\u0131l\u0131mlar\u0131 veya PHP, Java gibi dillerle yaz\u0131lm\u0131\u015f uygulamalar kullan\u0131l\u0131rd\u0131. Ancak Node.js, JavaScript&#8217;i taray\u0131c\u0131n\u0131n d\u0131\u015f\u0131na ta\u015f\u0131yarak geli\u015ftiricilere tam te\u015fekk\u00fcll\u00fc, y\u00fcksek performansl\u0131 ve \u00f6l\u00e7eklenebilir sunucu uygulamalar\u0131 yazma imkan\u0131 sundu. Bu durum, \u00f6zellikle ger\u00e7ek zamanl\u0131 uygulamalar ve API servisleri i\u00e7in Node.js&#8217;i vazge\u00e7ilmez k\u0131ld\u0131.<\/p>\n<p>Node.js&#8217;in temelinde, Google Chrome&#8217;un V8 JavaScript motoru yatar. Bu motor, JavaScript kodunu makine koduna derleyerek inan\u0131lmaz bir h\u0131z sa\u011flar. Node.js&#8217;i di\u011fer sunucu teknolojilerinden ay\u0131ran en \u00f6nemli \u00f6zelliklerden biri ise <strong>olay tabanl\u0131 (event-driven)<\/strong> ve <strong>engellemeyen (non-blocking) I\/O<\/strong> modelidir. Geleneksel sunucular her yeni istek i\u00e7in yeni bir i\u015f par\u00e7ac\u0131\u011f\u0131 (thread) olu\u015ftururken, Node.js tek bir i\u015f par\u00e7ac\u0131\u011f\u0131 \u00fczerinde \u00e7al\u0131\u015f\u0131r ve gelen t\u00fcm istekleri bir olay d\u00f6ng\u00fcs\u00fc (event loop) arac\u0131l\u0131\u011f\u0131yla y\u00f6netir. Bu, sunucunun ayn\u0131 anda binlerce ba\u011flant\u0131y\u0131 \u00e7ok daha az kaynak t\u00fcketerek y\u00f6netebilmesini sa\u011flar. \u00d6rne\u011fin, bir veritaban\u0131 sorgusu veya dosya okuma i\u015flemi gibi uzun s\u00fcren bir operasyon ba\u015flad\u0131\u011f\u0131nda, Node.js bu i\u015flemin bitmesini beklemez; bunun yerine di\u011fer istekleri i\u015flemeye devam eder ve uzun s\u00fcren i\u015flem bitti\u011finde bir geri \u00e7a\u011f\u0131rma (callback) fonksiyonu arac\u0131l\u0131\u011f\u0131yla bilgilendirilir. Bu mimari, Node.js uygulamalar\u0131n\u0131n genellikle \u00e7ok daha h\u0131zl\u0131 ve verimli olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Peki, bir web sunucusu olu\u015fturmak i\u00e7in Node.js&#8217;in hangi k\u0131sm\u0131na ihtiyac\u0131m\u0131z var? \u0130\u015fte burada <strong>HTTP mod\u00fcl\u00fc<\/strong> devreye giriyor. Node.js, kurulumuyla birlikte bir\u00e7ok yerle\u015fik mod\u00fclle gelir ve HTTP mod\u00fcl\u00fc de bunlardan biridir. Bu mod\u00fcl, Node.js uygulamalar\u0131n\u0131n HTTP sunucular\u0131 ve istemcileri olu\u015fturmas\u0131na olanak tan\u0131yan temel i\u015flevleri sa\u011flar. Yani, web taray\u0131c\u0131lar\u0131n\u0131n konu\u015ftu\u011fu dili (HTTP protokol\u00fcn\u00fc) anlamak ve bu dilde ileti\u015fim kurmak i\u00e7in gereken t\u00fcm ara\u00e7lar\u0131 bize sunar. HTTP mod\u00fcl\u00fc sayesinde, gelen istekleri dinleyebilir, iste\u011fin URL&#8217;sini, metodunu (GET, POST vb.), ba\u015fl\u0131klar\u0131n\u0131 (headers) ve g\u00f6vdesini (body) okuyabiliriz. Ayn\u0131 \u015fekilde, istemciye geri g\u00f6nderece\u011fimiz yan\u0131t\u0131n durum kodunu (200 OK, 404 Not Found), ba\u015fl\u0131klar\u0131n\u0131 ve i\u00e7eri\u011fini de bu mod\u00fcl arac\u0131l\u0131\u011f\u0131yla belirleyebiliriz. K\u0131sacas\u0131, HTTP mod\u00fcl\u00fc, Node.js tabanl\u0131 web sunucumuzun beynini ve ileti\u015fim merkezini olu\u015fturur.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Node.js&#8217;in olay d\u00f6ng\u00fcs\u00fc modelini anlamak, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini optimize etmek i\u00e7in kritik \u00f6neme sahiptir. Uzun s\u00fcreli CPU yo\u011fun i\u015flemlerden ka\u00e7\u0131narak veya bunlar\u0131 worker thread&#8217;lere ta\u015f\u0131yarak uygulaman\u0131z\u0131n &#8220;t\u0131kanmas\u0131n\u0131&#8221; \u00f6nleyebilirsiniz.\n    <\/div>\n<p>Bu temel kavramlar\u0131 anlad\u0131ktan sonra, art\u0131k ilk Node.js web sunucumuzu kurmaya ve Node.js&#8217;in HTTP mod\u00fcl\u00fc ile nas\u0131l etkile\u015fime ge\u00e7ti\u011fini uygulamal\u0131 olarak g\u00f6rmeye haz\u0131r\u0131z. Bu mod\u00fcl, web sunucusu geli\u015ftirmenin temellerini \u00f6\u011frenmek i\u00e7in m\u00fckemmel bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r ve bir\u00e7ok pop\u00fcler Node.js web \u00e7at\u0131s\u0131n\u0131n (Express.js, Koa.js vb.) temelini olu\u015fturur. Dolay\u0131s\u0131yla, bu mod\u00fcl\u00fc iyi anlamak, ileri d\u00fczey web geli\u015ftirme becerileri edinmeniz i\u00e7in sa\u011flam bir zemin haz\u0131rlayacakt\u0131r. \u015eimdi, bu teorik bilgileri prati\u011fe d\u00f6kelim ve kendi sunucumuzu hayata ge\u00e7irelim.<\/p>\n<h2>\u0130lk Node.js Web Sunucunuzu Ad\u0131m Ad\u0131m Nas\u0131l Kurars\u0131n\u0131z?<\/h2>\n<p>Kendi web sunucunuzu olu\u015fturma fikri kula\u011fa karma\u015f\u0131k gelebilir, ancak Node.js&#8217;in HTTP mod\u00fcl\u00fc sayesinde bu s\u00fcre\u00e7 \u015fa\u015f\u0131rt\u0131c\u0131 derecede basittir. Bu b\u00f6l\u00fcmde, &#8220;Merhaba D\u00fcnya!&#8221; mesaj\u0131n\u0131 d\u00f6nd\u00fcren temel bir web sunucusunu nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Bu, Node.js ile sunucu taraf\u0131 programlamaya ataca\u011f\u0131n\u0131z ilk ve en \u00f6nemli ad\u0131md\u0131r.<\/p>\n<h3>1. Node.js Kurulumu ve Proje Ba\u015flatma<\/h3>\n<p>\u00d6ncelikle bilgisayar\u0131n\u0131zda Node.js&#8217;in kurulu oldu\u011fundan emin olmal\u0131s\u0131n\u0131z. E\u011fer kurulu de\u011filse, <a href=\"https:\/\/nodejs.org\/\" target=\"_blank\">Node.js resmi web sitesinden<\/a> i\u015fletim sisteminize uygun s\u00fcr\u00fcm\u00fc indirip kurabilirsiniz. Kurulumu tamamlad\u0131ktan sonra, bir terminal veya komut istemcisi a\u00e7arak a\u015fa\u011f\u0131daki komutlarla Node.js ve npm (Node Package Manager) s\u00fcr\u00fcmlerini kontrol edebilirsiniz:<\/p>\n<pre><code>\n      node -v\n      npm -v\n    <\/code><\/pre>\n<p>Bu komutlar size kurulu s\u00fcr\u00fcmleri g\u00f6sterecektir. Ard\u0131ndan, projeniz i\u00e7in yeni bir dizin olu\u015fturun ve bu dizine ge\u00e7in:<\/p>\n<pre><code>\n      mkdir my-first-server\n      cd my-first-server\n    <\/code><\/pre>\n<p>Bu dizinde, sunucu kodumuzu i\u00e7eren bir JavaScript dosyas\u0131 olu\u015fturaca\u011f\u0131z. \u00d6rne\u011fin, <code>server.js<\/code> ad\u0131nda bir dosya olu\u015fturabilirsiniz.<\/p>\n<h3>2. HTTP Mod\u00fcl\u00fcn\u00fc \u0130\u00e7eri Aktarma ve Sunucu Olu\u015fturma<\/h3>\n<p><code>server.js<\/code> dosyan\u0131z\u0131n i\u00e7ine a\u015fa\u011f\u0131daki kodu ekleyin. Bu kod par\u00e7as\u0131, Node.js&#8217;in HTTP mod\u00fcl\u00fcn\u00fc kullanarak basit bir web sunucusu olu\u015fturman\u0131n temelini atar:<\/p>\n<pre><code>\n      \/\/ 1. HTTP mod\u00fcl\u00fcn\u00fc i\u00e7eri aktar\u0131yoruz\n      const http = require('http');\n\n      \/\/ 2. Sunucunun dinleyece\u011fi port numaras\u0131n\u0131 ve ana bilgisayar ad\u0131n\u0131 tan\u0131ml\u0131yoruz\n      const hostname = '127.0.0.1'; \/\/ localhost\n      const port = 3000;\n\n      \/\/ 3. Bir sunucu olu\u015fturuyoruz\n      const server = http.createServer((req, res) => {\n          \/\/ Gelen her istek i\u00e7in \u00e7al\u0131\u015facak fonksiyon\n          console.log(<code class=\"language-\">Gelen istek: ${req.method} ${req.url}<\/code>);\n\n          \/\/ Yan\u0131t\u0131n HTTP durum kodunu ayarl\u0131yoruz (200 OK)\n          res.statusCode = 200;\n          \/\/ Yan\u0131t ba\u015fl\u0131\u011f\u0131n\u0131 ayarl\u0131yoruz: \u0130\u00e7erik tipi d\u00fcz metin (plain text)\n          res.setHeader('Content-Type', 'text\/plain; charset=utf-8');\n\n          \/\/ Yan\u0131t\u0131 g\u00f6nderiyoruz\n          res.end('Merhaba Dunya! Node.js Sunucum Calisiyor!\\n');\n      });\n\n      \/\/ 4. Sunucuyu belirtilen port ve ana bilgisayar \u00fczerinde dinlemeye ba\u015fl\u0131yoruz\n      server.listen(port, hostname, () => {\n          console.log(<code class=\"language-\">Sunucu http:\/\/${hostname}:${port}\/ adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n      });\n    <\/code><\/pre>\n<p>\u015eimdi bu kod blo\u011funu ad\u0131m ad\u0131m inceleyelim:<\/p>\n<ul>\n<li><code>const http = require('http');<\/code>: Bu sat\u0131r, Node.js&#8217;in yerle\u015fik HTTP mod\u00fcl\u00fcn\u00fc projemize dahil eder. <code>require()<\/code> fonksiyonu, Node.js&#8217;te mod\u00fclleri i\u00e7eri aktarmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>const hostname = '127.0.0.1';<\/code> ve <code>const port = 3000;<\/code>: Bu sat\u0131rlar, sunucumuzun hangi IP adresinde (<code>127.0.0.1<\/code> genellikle localhost&#8217;u temsil eder) ve hangi port numaras\u0131 \u00fczerinde (<code>3000<\/code> pop\u00fcler bir geli\u015ftirme portudur) dinleyece\u011fini belirtir.<\/li>\n<li><code>const server = http.createServer((req, res) => { ... });<\/code>: Buras\u0131 i\u015fin kalbidir. <code>http.createServer()<\/code> metodu, yeni bir HTTP sunucusu nesnesi olu\u015fturur. Bu metoda bir geri \u00e7a\u011f\u0131rma fonksiyonu (callback function) ge\u00e7irilir. Bu fonksiyon, sunucuya her yeni istek geldi\u011finde \u00e7al\u0131\u015f\u0131r.\n<ul>\n<li><code>req<\/code> (request &#8211; istek) objesi, istemciden gelen istekle ilgili t\u00fcm bilgileri (URL, HTTP metodu, ba\u015fl\u0131klar, veri vb.) i\u00e7erir.<\/li>\n<li><code>res<\/code> (response &#8211; yan\u0131t) objesi, sunucunun istemciye geri g\u00f6nderece\u011fi yan\u0131t\u0131 olu\u015fturmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><code>console.log(<code>Gelen istek: ${req.method} ${req.url}<\/code>);<\/code>: Bu sat\u0131r, her istek geldi\u011finde terminale iste\u011fin metodunu ve URL&#8217;sini yazd\u0131r\u0131r. Bu, geli\u015ftirme s\u0131ras\u0131nda \u00e7ok faydal\u0131d\u0131r.<\/li>\n<li><code>res.statusCode = 200;<\/code>: Yan\u0131t\u0131n HTTP durum kodunu 200 olarak ayarlar\u0131z. 200, iste\u011fin ba\u015far\u0131l\u0131 bir \u015fekilde i\u015flendi\u011fi anlam\u0131na gelir.<\/li>\n<li><code>res.setHeader('Content-Type', 'text\/plain; charset=utf-8');<\/code>: Yan\u0131t ba\u015fl\u0131klar\u0131n\u0131 ayarlar\u0131z. <code>Content-Type<\/code> ba\u015fl\u0131\u011f\u0131, istemciye g\u00f6nderilen verinin tipini bildirir. Burada d\u00fcz metin (plain text) g\u00f6nderdi\u011fimizi belirtiyoruz. <code>charset=utf-8<\/code> ise T\u00fcrk\u00e7e karakterlerin d\u00fczg\u00fcn g\u00f6r\u00fcnmesini sa\u011flar.<\/li>\n<li><code>res.end('Merhaba Dunya! Node.js Sunucum Calisiyor!\\n');<\/code>: Bu sat\u0131r, yan\u0131t\u0131n g\u00f6vdesini (body) belirler ve yan\u0131t\u0131 istemciye g\u00f6nderir. <code>res.end()<\/code> \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, yan\u0131t i\u015flemi tamamlan\u0131r ve ba\u011flant\u0131 kapat\u0131l\u0131r.<\/li>\n<li><code>server.listen(port, hostname, () => { ... });<\/code>: Bu metod, yukar\u0131da tan\u0131mlad\u0131\u011f\u0131m\u0131z sunucuyu belirtilen port ve ana bilgisayar \u00fczerinde dinlemeye ba\u015flat\u0131r. Sunucu ba\u015far\u0131yla dinlemeye ba\u015flad\u0131\u011f\u0131nda, i\u00e7indeki geri \u00e7a\u011f\u0131rma fonksiyonu \u00e7al\u0131\u015f\u0131r ve terminale bir mesaj yazd\u0131r\u0131l\u0131r.<\/li>\n<\/ul>\n<h3>3. Sunucuyu \u00c7al\u0131\u015ft\u0131rma ve Test Etme<\/h3>\n<p>Kodunuzu kaydettikten sonra, terminalinizde proje dizininizdeyken a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\n      node server.js\n    <\/code><\/pre>\n<p>Terminalde &#8220;Sunucu http:\/\/127.0.0.1:3000\/ adresinde \u00e7al\u0131\u015f\u0131yor&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. \u015eimdi bir web taray\u0131c\u0131s\u0131 a\u00e7\u0131n ve adres \u00e7ubu\u011funa <code>http:\/\/localhost:3000<\/code> yaz\u0131n. Taray\u0131c\u0131n\u0131zda &#8220;Merhaba Dunya! Node.js Sunucum Calisiyor!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. Terminalinize geri d\u00f6nd\u00fc\u011f\u00fcn\u00fczde ise taray\u0131c\u0131n\u0131zdan gelen iste\u011fin (<code>GET \/<\/code>) logland\u0131\u011f\u0131n\u0131 fark edeceksiniz.<\/p>\n<p>Tebrikler! Kendi Node.js web sunucunuzu ba\u015far\u0131yla kurdunuz ve \u00e7al\u0131\u015ft\u0131rd\u0131n\u0131z. Bu basit &#8220;Merhaba D\u00fcnya&#8221; sunucusu, t\u00fcm karma\u015f\u0131k web uygulamalar\u0131n\u0131n temelini olu\u015fturur. Bir sonraki b\u00f6l\u00fcmde, bu temel sunucuyu daha i\u015flevsel hale getirerek farkl\u0131 URL&#8217;lere (yollara) nas\u0131l yan\u0131t verece\u011fimizi ve istekleri nas\u0131l y\u00f6netece\u011fimizi \u00f6\u011frenece\u011fiz.<\/p>\n<h2>\u0130stekleri ve Yan\u0131tlar\u0131 Anlamak: Dinamik Routing Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>\u00d6nceki b\u00f6l\u00fcmde basit bir &#8220;Merhaba D\u00fcnya&#8221; sunucusu olu\u015fturduk. Ancak ger\u00e7ek d\u00fcnya uygulamalar\u0131nda, kullan\u0131c\u0131lar farkl\u0131 URL&#8217;lere (yollara) gider ve her birine \u00f6zel i\u00e7erik sunmak isteriz. \u0130\u015fte bu noktada <strong>routing (y\u00f6nlendirme)<\/strong> kavram\u0131 devreye girer. Routing, gelen HTTP isteklerini URL&#8217;lerine ve metotlar\u0131na (GET, POST, PUT, DELETE vb.) g\u00f6re farkl\u0131 i\u015fleyicilere y\u00f6nlendirme i\u015flemidir. Node.js&#8217;in HTTP mod\u00fcl\u00fc ile bu y\u00f6nlendirmeyi manuel olarak nas\u0131l yapaca\u011f\u0131m\u0131z\u0131 \u00f6\u011frenelim.<\/p>\n<h3>\u0130stek Objeleri (<code>req<\/code>) ile \u00c7al\u0131\u015fmak<\/h3>\n<p>Sunucu geri \u00e7a\u011f\u0131rma fonksiyonumuzdaki <code>req<\/code> (request) objesi, istemciden gelen istekle ilgili de\u011ferli bilgiler i\u00e7erir. En s\u0131k kullanacaklar\u0131m\u0131z \u015funlard\u0131r:<\/p>\n<ul>\n<li><code>req.url<\/code>: \u0130ste\u011fin URL yolunu d\u00f6nd\u00fcr\u00fcr (\u00f6rne\u011fin, <code>\/hakkinda<\/code>, <code>\/api\/users<\/code>).<\/li>\n<li><code>req.method<\/code>: \u0130ste\u011fin HTTP metodunu d\u00f6nd\u00fcr\u00fcr (\u00f6rne\u011fin, <code>GET<\/code>, <code>POST<\/code>).<\/li>\n<li><code>req.headers<\/code>: \u0130ste\u011fin ba\u015fl\u0131klar\u0131n\u0131 i\u00e7eren bir obje.<\/li>\n<li><code>req.body<\/code>: POST veya PUT gibi isteklerde g\u00f6nderilen veri (bu veri varsay\u0131lan olarak okunmaz, ak\u0131\u015f olarak gelir ve ayr\u0131ca i\u015flenmesi gerekir).<\/li>\n<\/ul>\n<h3>Yan\u0131t Objeleri (<code>res<\/code>) ile \u00c7al\u0131\u015fmak<\/h3>\n<p><code>res<\/code> (response) objesi ise istemciye geri g\u00f6nderilecek yan\u0131t\u0131 yap\u0131land\u0131rmak i\u00e7in kullan\u0131l\u0131r. Temel \u00f6zelliklerini zaten g\u00f6rd\u00fck:<\/p>\n<ul>\n<li><code>res.statusCode<\/code>: HTTP durum kodu (200, 404, 500 vb.).<\/li>\n<li><code>res.setHeader(name, value)<\/code>: Yan\u0131t ba\u015fl\u0131\u011f\u0131 eklemek i\u00e7in.<\/li>\n<li><code>res.end(data)<\/code>: Yan\u0131t\u0131 tamamlar ve iste\u011fe veri g\u00f6nderir.<\/li>\n<\/ul>\n<h3>Dinamik Routing Uygulamas\u0131<\/h3>\n<p>\u015eimdi <code>server.js<\/code> dosyam\u0131z\u0131 g\u00fcncelleyerek farkl\u0131 URL&#8217;ler i\u00e7in farkl\u0131 yan\u0131tlar g\u00f6nderen bir routing mekanizmas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>\n      const http = require('http');\n\n      const hostname = '127.0.0.1';\n      const port = 3000;\n\n      const server = http.createServer((req, res) => {\n          console.log(<code class=\"language-\">Gelen istek: ${req.method} ${req.url}<\/code>);\n\n          \/\/ Yan\u0131t\u0131n Content-Type'\u0131n\u0131 varsay\u0131lan olarak HTML yapal\u0131m\n          res.setHeader('Content-Type', 'text\/html; charset=utf-8');\n\n          if (req.url === '\/') {\n              \/\/ Ana sayfa iste\u011fi\n              res.statusCode = 200;\n              res.end('<h1>Ana Sayfa<\/h1><p>Node.js ile ilk sunucunuza hos geldiniz!<\/p>');\n          } else if (req.url === '\/hakkinda') {\n              \/\/ Hakk\u0131nda sayfas\u0131 iste\u011fi\n              res.statusCode = 200;\n              res.end('<h1>Hakkinda Sayfasi<\/h1><p>Bu, Node.js HTTP modulu ile olusturulmus basit bir web sunucusudur.<\/p>');\n          } else if (req.url === '\/api\/kullanicilar' && req.method === 'GET') {\n              \/\/ API iste\u011fi: Kullan\u0131c\u0131lar\u0131 listele\n              res.statusCode = 200;\n              res.setHeader('Content-Type', 'application\/json; charset=utf-8'); \/\/ JSON yan\u0131t\u0131\n              const users = [\n                  { id: 1, name: 'Alice' },\n                  { id: 2, name: 'Bob' }\n              ];\n              res.end(JSON.stringify(users)); \/\/ JavaScript objesini JSON string'ine d\u00f6n\u00fc\u015ft\u00fcr\n          } else if (req.url === '\/api\/kullanicilar' && req.method === 'POST') {\n              \/\/ API iste\u011fi: Yeni kullan\u0131c\u0131 olu\u015ftur\n              let body = '';\n              req.on('data', chunk => {\n                  body += chunk.toString(); \/\/ Gelen veriyi birle\u015ftir\n              });\n              req.on('end', () => {\n                  try {\n                      const newUser = JSON.parse(body);\n                      console.log('Yeni kullan\u0131c\u0131 olu\u015fturuldu:', newUser);\n                      res.statusCode = 201; \/\/ 201 Created\n                      res.setHeader('Content-Type', 'application\/json; charset=utf-8');\n                      res.end(JSON.stringify({ message: 'Kullan\u0131c\u0131 ba\u015far\u0131yla olu\u015fturuldu', user: newUser }));\n                  } catch (error) {\n                      res.statusCode = 400; \/\/ 400 Bad Request\n                      res.setHeader('Content-Type', 'application\/json; charset=utf-8');\n                      res.end(JSON.stringify({ message: 'Ge\u00e7ersiz JSON format\u0131' }));\n                  }\n              });\n          }\n          else {\n              \/\/ Bulunamayan sayfa\n              res.statusCode = 404;\n              res.end('<h1>404 Sayfa Bulunamadi<\/h1><p>Aradiginiz sayfa mevcut degil.<\/p>');\n          }\n      });\n\n      server.listen(port, hostname, () => {\n          console.log(<code class=\"language-\">Sunucu http:\/\/${hostname}:${port}\/ adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n      });\n    <\/code><\/pre>\n<p>Bu g\u00fcncellenmi\u015f kodda neler de\u011fi\u015fti?<\/p>\n<ul>\n<li><code>if (req.url === '\/') { ... }<\/code> gibi ko\u015fullu ifadeler kullanarak <code>req.url<\/code> de\u011ferine g\u00f6re farkl\u0131 kod bloklar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131yoruz. Bu, temel routing mant\u0131\u011f\u0131n\u0131 olu\u015fturur.<\/li>\n<li><code>\/hakkinda<\/code> yolu i\u00e7in farkl\u0131 bir HTML i\u00e7eri\u011fi g\u00f6nderiyoruz.<\/li>\n<li><code>\/api\/kullanicilar<\/code> yolu i\u00e7in hem <code>GET<\/code> hem de <code>POST<\/code> metodlar\u0131n\u0131 ele al\u0131yoruz.\n<ul>\n<li><code>GET \/api\/kullanicilar<\/code> iste\u011finde, <code>Content-Type<\/code>&#8216;\u0131 <code>application\/json<\/code> olarak ayarl\u0131yor ve bir JavaScript dizisini <code>JSON.stringify()<\/code> kullanarak JSON format\u0131nda geri g\u00f6nderiyoruz.<\/li>\n<li><code>POST \/api\/kullanicilar<\/code> iste\u011finde, istemciden gelen veriyi (genellikle JSON format\u0131nda) nas\u0131l okuyaca\u011f\u0131m\u0131z\u0131 g\u00f6steriyoruz. <code>req.on('data', ...)<\/code> ile veri par\u00e7alar\u0131n\u0131 (chunks) topluyor, <code>req.on('end', ...)<\/code> ile t\u00fcm veri geldi\u011finde i\u015flemi tamaml\u0131yoruz. Gelen JSON verisini <code>JSON.parse()<\/code> ile JavaScript objesine d\u00f6n\u00fc\u015ft\u00fcr\u00fcyor ve uygun bir yan\u0131t g\u00f6nderiyoruz. Hata durumlar\u0131n\u0131 da (ge\u00e7ersiz JSON gibi) ele al\u0131yoruz.<\/li>\n<\/ul>\n<\/li>\n<li>Son olarak, hi\u00e7bir ko\u015fula uymayan istekler i\u00e7in <code>404 Sayfa Bulunamad\u0131<\/code> yan\u0131t\u0131 g\u00f6nderiyoruz.<\/li>\n<\/ul>\n<p>Bu routing mekanizmas\u0131, sunucunuzun farkl\u0131 isteklere ak\u0131ll\u0131ca yan\u0131t vermesini sa\u011flar. Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:3000\/<\/code>, <code>http:\/\/localhost:3000\/hakkinda<\/code> ve <code>http:\/\/localhost:3000\/api\/kullanicilar<\/code> adreslerini ziyaret ederek fark\u0131 g\u00f6rebilirsiniz. <code>POST<\/code> iste\u011fini test etmek i\u00e7in Postman veya benzeri bir API test arac\u0131 kullanman\u0131z gerekecektir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Karma\u015f\u0131k uygulamalarda, bu manuel routing yakla\u015f\u0131m\u0131 h\u0131zla y\u00f6netilemez hale gelebilir. Bu nedenle Express.js gibi daha y\u00fcksek seviyeli \u00e7er\u00e7eveler, routing i\u00e7in \u00e7ok daha g\u00fc\u00e7l\u00fc ve okunabilir API&#8217;ler sunar. Ancak HTTP mod\u00fcl\u00fc ile temelini anlamak, bu \u00e7er\u00e7evelerin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kavraman\u0131za yard\u0131mc\u0131 olur.\n    <\/div>\n<p>Bu b\u00f6l\u00fcmle birlikte, Node.js HTTP mod\u00fcl\u00fc ile sadece statik mesajlar de\u011fil, ayn\u0131 zamanda iste\u011fe ba\u011fl\u0131 olarak farkl\u0131 i\u00e7erikler sunabilen ve hatta API isteklerini i\u015fleyebilen daha dinamik bir web sunucusu olu\u015fturmay\u0131 \u00f6\u011frendiniz. Bir sonraki ad\u0131mda, sunucumuzun sadece metin de\u011fil, ayn\u0131 zamanda HTML, CSS ve JavaScript gibi statik dosyalar\u0131 da nas\u0131l sunabilece\u011fini ke\u015ffedece\u011fiz.<\/p>\n<h2>Statik Dosyalar\u0131 Sunmak ve Dinamik \u0130\u00e7erik Olu\u015fturmak M\u00fcmk\u00fcn m\u00fc?<\/h2>\n<p>\u015eimdiye kadar, Node.js sunucumuz arac\u0131l\u0131\u011f\u0131yla d\u00fcz metin veya do\u011frudan HTML string&#8217;leri g\u00f6nderdik. Ancak modern web uygulamalar\u0131, HTML dosyalar\u0131, CSS stil sayfalar\u0131, JavaScript betikleri ve g\u00f6rseller gibi bir\u00e7ok statik dosyadan olu\u015fur. Bu b\u00f6l\u00fcmde, Node.js HTTP mod\u00fcl\u00fc ile bu t\u00fcr statik dosyalar\u0131 nas\u0131l sunaca\u011f\u0131m\u0131z\u0131 ve dinamik i\u00e7erik olu\u015fturma potansiyelini k\u0131saca ele alaca\u011f\u0131z.<\/p>\n<h3>Statik Dosya Sunumu \u0130\u00e7in Dosya Sistemi (<code>fs<\/code>) Mod\u00fcl\u00fc<\/h3>\n<p>Node.js&#8217;in yerle\u015fik <code>fs<\/code> (File System) mod\u00fcl\u00fc, dosyalar\u0131 okuma, yazma ve y\u00f6netme gibi i\u015flemler i\u00e7in kullan\u0131l\u0131r. Statik dosya sunumu i\u00e7in bu mod\u00fcl\u00fc kullanarak, istemcinin istedi\u011fi dosyay\u0131 sunucumuzun dosya sisteminden okuyup yan\u0131t olarak g\u00f6nderece\u011fiz. Bu i\u015flem, \u00f6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulamalar veya sadece bir HTML sayfas\u0131n\u0131 sunmak istedi\u011finiz durumlar i\u00e7in olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p>\u00d6ncelikle, projenizin k\u00f6k dizininde <code>public<\/code> ad\u0131nda bir klas\u00f6r olu\u015ftural\u0131m. Bu klas\u00f6r\u00fcn i\u00e7ine <code>index.html<\/code>, <code>style.css<\/code> ve <code>script.js<\/code> gibi \u00f6rnek dosyalar ekleyelim:<\/p>\n<pre><code>\n      \/\/ public\/index.html\n      &lt;!DOCTYPE html&gt;\n      &lt;html lang=\"tr\"&gt;\n      &lt;head&gt;\n          &lt;meta charset=\"UTF-8\"&gt;\n          &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n          &lt;title&gt;Node.js Statik Sunucu&lt;\/title&gt;\n          &lt;link rel=\"stylesheet\" href=\"\/style.css\"&gt;\n      &lt;\/head&gt;\n      &lt;body&gt;\n          &lt;h1&gt;Statik Dosya Sunumu&lt;\/h1&gt;\n          &lt;p&gt;Bu sayfa Node.js sunucusu tarafindan sunulmaktadir.&lt;\/p&gt;\n          &lt;button id=\"myButton\"&gt;Bana Tikla&lt;\/button&gt;\n          &lt;script src=\"\/script.js\"&gt;&lt;\/script&gt;\n      &lt;\/body&gt;\n      &lt;\/html&gt;\n    <\/code><\/pre>\n<pre><code>\n      \/\/ public\/style.css\n      body {\n          font-family: Arial, sans-serif;\n          background-color: #f4f4f4;\n          color: #333;\n          text-align: center;\n          padding-top: 50px;\n      }\n      h1 {\n          color: #0056b3;\n      }\n      button {\n          padding: 10px 20px;\n          background-color: #28a745;\n          color: white;\n          border: none;\n          cursor: pointer;\n          border-radius: 5px;\n      }\n    <\/code><\/pre>\n<pre><code>\n      \/\/ public\/script.js\n      document.getElementById('myButton').addEventListener('click', () => {\n          alert('Butona tikladiniz! JavaScript calisiyor.');\n      });\n    <\/code><\/pre>\n<p>\u015eimdi <code>server.js<\/code> dosyam\u0131z\u0131 g\u00fcncelleyerek bu statik dosyalar\u0131 sunacak mant\u0131\u011f\u0131 ekleyelim:<\/p>\n<pre><code>\n      const http = require('http');\n      const fs = require('fs'); \/\/ Dosya sistemi mod\u00fcl\u00fcn\u00fc dahil ediyoruz\n      const path = require('path'); \/\/ Yol mod\u00fcl\u00fcn\u00fc dahil ediyoruz\n\n      const hostname = '127.0.0.1';\n      const port = 3000;\n\n      const server = http.createServer((req, res) => {\n          console.log(<code class=\"language-\">Gelen istek: ${req.method} ${req.url}<\/code>);\n\n          \/\/ \u0130stek URL'sine g\u00f6re dosya yolunu belirliyoruz\n          let filePath = '.' + req.url;\n          if (filePath === '.\/') {\n              filePath = '.\/public\/index.html'; \/\/ Ana dizin iste\u011fi i\u00e7in index.html\n          } else {\n              filePath = '.\/public' + req.url; \/\/ Di\u011fer statik dosyalar i\u00e7in\n          }\n\n          \/\/ Dosya uzant\u0131s\u0131na g\u00f6re Content-Type belirleme fonksiyonu\n          const getContentType = (filePath) => {\n              const extname = String(path.extname(filePath)).toLowerCase();\n              const mimeTypes = {\n                  '.html': 'text\/html',\n                  '.js': 'text\/javascript',\n                  '.css': 'text\/css',\n                  '.json': 'application\/json',\n                  '.png': 'image\/png',\n                  '.jpg': 'image\/jpg',\n                  '.gif': 'image\/gif',\n                  '.svg': 'image\/svg+xml',\n                  '.ico': 'image\/x-icon'\n              };\n              return mimeTypes[extname] || 'application\/octet-stream';\n          };\n\n          \/\/ Dosyay\u0131 okuma ve g\u00f6nderme i\u015flemi\n          fs.readFile(filePath, (error, content) => {\n              if (error) {\n                  if (error.code === 'ENOENT') {\n                      \/\/ Dosya bulunamad\u0131 hatas\u0131\n                      res.statusCode = 404;\n                      res.setHeader('Content-Type', 'text\/html; charset=utf-8');\n                      res.end('<h1>404 Sayfa Bulunamadi<\/h1><p>Aradiginiz sayfa mevcut degil.<\/p>');\n                  } else {\n                      \/\/ Di\u011fer sunucu hatalar\u0131\n                      res.statusCode = 500;\n                      res.setHeader('Content-Type', 'text\/html; charset=utf-8');\n                      res.end(<code class=\"language-\"><h1>500 Sunucu Hatasi<\/h1><p>Sunucuda bir hata olustu: ${error.code}<\/p><\/code>);\n                  }\n              } else {\n                  \/\/ Dosya ba\u015far\u0131yla okundu\n                  res.statusCode = 200;\n                  res.setHeader('Content-Type', getContentType(filePath) + '; charset=utf-8');\n                  res.end(content, 'utf-8');\n              }\n          });\n      });\n\n      server.listen(port, hostname, () => {\n          console.log(<code class=\"language-\">Sunucu http:\/\/${hostname}:${port}\/ adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n      });\n    <\/code><\/pre>\n<p>Bu kodda \u00f6nemli de\u011fi\u015fiklikler:<\/p>\n<ul>\n<li><code>fs<\/code> ve <code>path<\/code> mod\u00fcllerini dahil ettik. <code>path<\/code> mod\u00fcl\u00fc, dosya yollar\u0131yla \u00e7al\u0131\u015fmay\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><code>filePath<\/code> de\u011fi\u015fkenini, istenen URL&#8217;ye g\u00f6re <code>.\/public\/<\/code> dizini i\u00e7inde bir dosya yolu olu\u015fturacak \u015fekilde g\u00fcncelledik. Ana dizin (<code>\/<\/code>) iste\u011fi i\u00e7in <code>index.html<\/code>&#8216;i varsay\u0131lan yapt\u0131k.<\/li>\n<li><code>getContentType<\/code> ad\u0131nda bir yard\u0131mc\u0131 fonksiyon olu\u015fturduk. Bu fonksiyon, dosya uzant\u0131s\u0131na (<code>.html<\/code>, <code>.css<\/code>, <code>.js<\/code> vb.) g\u00f6re uygun <code>Content-Type<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 belirler. Bu, taray\u0131c\u0131n\u0131n dosyay\u0131 do\u011fru \u015fekilde yorumlamas\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/li>\n<li><code>fs.readFile(filePath, (error, content) => { ... });<\/code> asenkron fonksiyonu ile belirtilen dosyay\u0131 okuyoruz.\n<ul>\n<li>E\u011fer bir hata olursa (\u00f6rne\u011fin dosya bulunamazsa &#8211; <code>ENOENT<\/code>), uygun bir HTTP durum kodu (404 veya 500) ve hata mesaj\u0131 g\u00f6nderiyoruz.<\/li>\n<li>E\u011fer dosya ba\u015far\u0131yla okunursa, 200 durum kodu, do\u011fru <code>Content-Type<\/code> ba\u015fl\u0131\u011f\u0131 ve dosyan\u0131n i\u00e7eri\u011fini (<code>content<\/code>) yan\u0131t olarak g\u00f6nderiyoruz.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Sunucuyu yeniden ba\u015flat\u0131n (<code>Ctrl+C<\/code> ile durdurup <code>node server.js<\/code> ile tekrar ba\u015flat\u0131n) ve <code>http:\/\/localhost:3000\/<\/code> adresine gidin. Art\u0131k CSS ile stilize edilmi\u015f, JavaScript etkile\u015fimi olan bir HTML sayfas\u0131n\u0131 g\u00f6receksiniz. Taray\u0131c\u0131n\u0131z\u0131n geli\u015ftirici ara\u00e7lar\u0131n\u0131 a\u00e7arak network sekmesinde <code>index.html<\/code>, <code>style.css<\/code> ve <code>script.js<\/code> dosyalar\u0131n\u0131n ayr\u0131 ayr\u0131 y\u00fcklendi\u011fini de g\u00f6zlemleyebilirsiniz.<\/p>\n<h3>Dinamik \u0130\u00e7erik Olu\u015fturma Potansiyeli<\/h3>\n<p>HTTP mod\u00fcl\u00fc ile statik dosya sunumu yapabilsek de, daha karma\u015f\u0131k dinamik i\u00e7erikler i\u00e7in (\u00f6rne\u011fin, bir veritaban\u0131ndan veri \u00e7ekip HTML&#8217;ye yerle\u015ftirmek) bu manuel yakla\u015f\u0131m yetersiz kalabilir. Bu noktada, genellikle &#8220;template engine&#8221; (\u015fablon motoru) ad\u0131 verilen ara\u00e7lar devreye girer. Pug (eski ad\u0131yla Jade), EJS (Embedded JavaScript) veya Handlebars gibi \u015fablon motorlar\u0131, HTML \u015fablonlar\u0131n\u0131n i\u00e7ine JavaScript de\u011fi\u015fkenlerini veya d\u00f6ng\u00fclerini g\u00f6mmeye olanak tan\u0131r. Node.js HTTP mod\u00fcl\u00fc, bu \u015fablon motorlar\u0131n\u0131 do\u011frudan desteklemez, ancak bir \u015fablon motoru mod\u00fcl\u00fcn\u00fc i\u00e7eri aktar\u0131p onunla birlikte \u00e7al\u0131\u015fabiliriz. Bu, genellikle Express.js gibi daha \u00fcst d\u00fczey framework&#8217;ler i\u00e7inde \u00e7ok daha kolay entegre edilir.<\/p>\n<p>\u00d6zetle, Node.js HTTP mod\u00fcl\u00fc ve <code>fs<\/code> mod\u00fcl\u00fc ile statik dosyalar\u0131 sunmak olduk\u00e7a m\u00fcmk\u00fcnd\u00fcr ve basit projeler i\u00e7in harika bir \u00e7\u00f6z\u00fcmd\u00fcr. Ancak daha karma\u015f\u0131k routing, ara yaz\u0131l\u0131m (middleware) y\u00f6netimi ve dinamik i\u00e7erik olu\u015fturma ihtiya\u00e7lar\u0131n\u0131z oldu\u011funda, Express.js gibi framework&#8217;ler size \u00e7ok daha fazla kolayl\u0131k ve yap\u0131 sunacakt\u0131r. Bu temel bilgileri edinmek, o framework&#8217;lerin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlaman\u0131z i\u00e7in sa\u011flam bir temel sa\u011flar.<\/p>\n<h2>Web Sunucunuzu Daha Performansl\u0131 ve G\u00fcvenli Hale Nas\u0131l Getirirsiniz?<\/h2>\n<p>Basit bir web sunucusu olu\u015fturmak harika bir ba\u015flang\u0131\u00e7t\u0131r, ancak ger\u00e7ek d\u00fcnya uygulamalar\u0131nda performans ve g\u00fcvenlik kritik \u00f6neme sahiptir. Node.js&#8217;in HTTP mod\u00fcl\u00fc, temel i\u015flevselli\u011fi sa\u011flasa da, bu alanlarda manuel olarak baz\u0131 \u00f6nlemler alman\u0131z gerekir. Bu b\u00f6l\u00fcmde, sunucunuzu daha dayan\u0131kl\u0131, h\u0131zl\u0131 ve g\u00fcvenli hale getirmek i\u00e7in uygulayabilece\u011finiz baz\u0131 ipu\u00e7lar\u0131n\u0131 ve teknikleri inceleyece\u011fiz.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>Node.js, asenkron yap\u0131s\u0131 sayesinde do\u011fal olarak y\u00fcksek performansl\u0131d\u0131r, ancak baz\u0131 optimizasyonlar daha da iyi sonu\u00e7lar verebilir:<\/p>\n<ol>\n<li><strong>\u00d6nbellekleme (Caching):<\/strong> \u00d6zellikle statik dosyalar i\u00e7in, taray\u0131c\u0131lar\u0131n veya proxy sunucular\u0131n\u0131n dosyalar\u0131 tekrar indirmesini \u00f6nlemek i\u00e7in \u00f6nbellekleme ba\u015fl\u0131klar\u0131 kullan\u0131n.\n<ul>\n<li><code>Cache-Control<\/code>: Taray\u0131c\u0131ya bir kayna\u011f\u0131n ne kadar s\u00fcreyle \u00f6nbelle\u011fe al\u0131nabilece\u011fini ve nas\u0131l davranmas\u0131 gerekti\u011fini s\u00f6yler (\u00f6rne\u011fin, <code>public, max-age=31536000<\/code> bir y\u0131l boyunca \u00f6nbelle\u011fe al).<\/li>\n<li><code>Expires<\/code>: Belirli bir tarihe kadar \u00f6nbelle\u011fe al\u0131nmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>ETag<\/code> veya <code>Last-Modified<\/code>: Taray\u0131c\u0131n\u0131n, kayna\u011f\u0131n de\u011fi\u015fip de\u011fi\u015fmedi\u011fini sunucuya sormas\u0131na olanak tan\u0131r. De\u011fi\u015fmediyse, sunucu <code>304 Not Modified<\/code> yan\u0131t\u0131 g\u00f6ndererek tekrar veri g\u00f6ndermez.<\/li>\n<\/ul>\n<pre><code>\n              \/\/ \u00d6rnek: Statik dosya sunumunda Cache-Control ekleme\n              res.setHeader('Cache-Control', 'public, max-age=3600'); \/\/ 1 saat \u00f6nbelle\u011fe al\n              res.setHeader('ETag', 'some-unique-hash-of-file-content'); \/\/ Dosya i\u00e7eri\u011fine g\u00f6re bir hash\n              res.end(content, 'utf-8');\n            <\/code><\/pre>\n<\/li>\n<li><strong>Gzip S\u0131k\u0131\u015ft\u0131rma:<\/strong> B\u00fcy\u00fck metin tabanl\u0131 dosyalar\u0131 (HTML, CSS, JS) istemciye g\u00f6ndermeden \u00f6nce s\u0131k\u0131\u015ft\u0131rmak, a\u011f trafi\u011fini azalt\u0131r ve y\u00fckleme s\u00fcrelerini h\u0131zland\u0131r\u0131r. Node.js&#8217;in <code>zlib<\/code> mod\u00fcl\u00fc ile bunu manuel olarak yapabilir veya bir ara yaz\u0131l\u0131m k\u00fct\u00fcphanesi kullanabilirsiniz.\n<pre><code>\n              const zlib = require('zlib');\n              \/\/ ... sunucu i\u00e7inde\n              if (req.headers['accept-encoding'] && req.headers['accept-encoding'].includes('gzip')) {\n                  res.setHeader('Content-Encoding', 'gzip');\n                  zlib.gzip(content, (err, result) => {\n                      if (!err) res.end(result);\n                      else res.end(content); \/\/ Hata durumunda s\u0131k\u0131\u015ft\u0131rmadan g\u00f6nder\n                  });\n              } else {\n                  res.end(content);\n              }\n            <\/code><\/pre>\n<\/li>\n<li><strong>Keep-Alive Ba\u011flant\u0131lar\u0131:<\/strong> HTTP\/1.1 varsay\u0131lan olarak ba\u011flant\u0131lar\u0131 &#8220;keep-alive&#8221; tutar, yani ayn\u0131 istemci birden fazla istek i\u00e7in ayn\u0131 TCP ba\u011flant\u0131s\u0131n\u0131 kullanabilir. Bu, her istek i\u00e7in yeni bir ba\u011flant\u0131 kurma maliyetini ortadan kald\u0131r\u0131r. Node.js HTTP mod\u00fcl\u00fc bunu otomatik olarak y\u00f6netir, ancak sunucu ayarlar\u0131nda <code>server.timeout<\/code> ve <code>server.keepAliveTimeout<\/code> gibi de\u011ferleri optimize etmek isteyebilirsiniz.<\/li>\n<li><strong>Asenkron \u0130\u015flemleri Optimize Etme:<\/strong> Veritaban\u0131 sorgular\u0131, dosya i\u015flemleri gibi I\/O yo\u011fun g\u00f6revlerde geri \u00e7a\u011f\u0131rma fonksiyonlar\u0131n\u0131 veya Promises\/async-await yap\u0131s\u0131n\u0131 do\u011fru kullanmak, olay d\u00f6ng\u00fcs\u00fcn\u00fc engellememek i\u00e7in hayati \u00f6neme sahiptir.<\/li>\n<\/ol>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>Web sunucular\u0131 s\u00fcrekli olarak sald\u0131r\u0131 tehdidi alt\u0131ndad\u0131r. Temel HTTP mod\u00fcl\u00fc ile \u00e7al\u0131\u015f\u0131rken dikkate alman\u0131z gereken baz\u0131 g\u00fcvenlik \u00f6nlemleri:<\/p>\n<ol>\n<li><strong>Girdi Do\u011frulama (Input Validation):<\/strong> \u0130stemciden gelen her t\u00fcrl\u00fc veriyi (URL parametreleri, POST g\u00f6vdesi, ba\u015fl\u0131klar) asla g\u00fcvenilir kabul etmeyin. Sunucunuzda bu verileri mutlaka do\u011frulay\u0131n ve temizleyin (sanitize). SQL enjeksiyonu, XSS (Cross-Site Scripting) gibi sald\u0131r\u0131lar\u0131 \u00f6nlemek i\u00e7in bu kritik \u00f6neme sahiptir.\n<pre><code>\n              \/\/ \u00d6rnek: URL parametresi do\u011frulama (basit)\n              const url = require('url');\n              const myUrl = url.parse(req.url, true);\n              const userId = parseInt(myUrl.query.id);\n              if (isNaN(userId)) {\n                  res.statusCode = 400;\n                  res.end('Gecersiz Kullanici ID');\n                  return;\n              }\n              \/\/ ... userId ile g\u00fcvenli bir \u015fekilde devam et\n            <\/code><\/pre>\n<\/li>\n<li><strong>Hata Y\u00f6netimi (Error Handling):<\/strong> Uygulaman\u0131zdaki hatalar\u0131n istemcilere hassas bilgiler s\u0131zd\u0131rmad\u0131\u011f\u0131ndan emin olun. \u00dcretim ortam\u0131nda ayr\u0131nt\u0131l\u0131 hata mesajlar\u0131 yerine genel hata mesajlar\u0131 g\u00f6sterin. Sunucunuzun \u00e7\u00f6kmesini \u00f6nlemek i\u00e7in <code>try-catch<\/code> bloklar\u0131 ve <code>process.on('uncaughtException', ...)<\/code> gibi global hata yakalay\u0131c\u0131lar kullan\u0131n.\n<pre><code>\n              process.on('uncaughtException', (err) => {\n                  console.error('Yakalanmayan hata:', err);\n                  \/\/ \u00dcretim ortam\u0131nda sunucuyu kapatmak yerine, hata loglay\u0131p \u00e7al\u0131\u015fmaya devam etmeye \u00e7al\u0131\u015f\u0131n\n                  \/\/ veya graceful shutdown (d\u00fczenli kapatma) uygulay\u0131n\n              });\n\n              \/\/ ... sunucu i\u00e7inde\n              try {\n                  \/\/ Potansiyel hata olabilecek kod\n              } catch (error) {\n                  res.statusCode = 500;\n                  res.end('Sunucu ic hatasi');\n              }\n            <\/code><\/pre>\n<\/li>\n<li><strong>HTTP Ba\u015fl\u0131klar\u0131n\u0131 G\u00fcvenli Hale Getirme:<\/strong> G\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azaltmak i\u00e7in baz\u0131 HTTP ba\u015fl\u0131klar\u0131n\u0131 ayarlay\u0131n:\n<ul>\n<li><code>X-Content-Type-Options: nosniff<\/code>: Taray\u0131c\u0131n\u0131n Content-Type ba\u015fl\u0131\u011f\u0131n\u0131 de\u011fi\u015ftirmesini engeller.<\/li>\n<li><code>X-Frame-Options: DENY<\/code>: Clickjacking sald\u0131r\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in sayfan\u0131z\u0131n ba\u015fka bir sitede bir <code>&lt;iframe&gt;<\/code> i\u00e7inde g\u00f6r\u00fcnt\u00fclenmesini engeller.<\/li>\n<li><code>Content-Security-Policy<\/code> (CSP): XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 g\u00fc\u00e7l\u00fc bir koruma sa\u011flar. Hangi kaynaklardan komut dosyalar\u0131, stiller vb. y\u00fcklenmesine izin verildi\u011fini belirtir.<\/li>\n<\/ul>\n<pre><code>\n              res.setHeader('X-Content-Type-Options', 'nosniff');\n              res.setHeader('X-Frame-Options', 'DENY');\n              \/\/ res.setHeader('Content-Security-Policy', \"default-src 'self'\"); \/\/ Daha karma\u015f\u0131k olabilir\n            <\/code><\/pre>\n<\/li>\n<li><strong>HTTPS Kullan\u0131m\u0131:<\/strong> Hassas verilerin \u015fifrelenmesi i\u00e7in HTTP yerine HTTPS kullanmak zorunludur. Node.js&#8217;in <code>https<\/code> mod\u00fcl\u00fc, SSL\/TLS sertifikalar\u0131 ile g\u00fcvenli sunucular olu\u015fturman\u0131za olanak tan\u0131r.\n<pre><code>\n              \/\/ HTTPS sunucusu \u00f6rne\u011fi (sertifika ve anahtar gerektirir)\n              const https = require('https');\n              const fs = require('fs');\n\n              const options = {\n                  key: fs.readFileSync('path\/to\/your\/private.key'),\n                  cert: fs.readFileSync('path\/to\/your\/certificate.crt')\n              };\n\n              https.createServer(options, (req, res) => {\n                  \/\/ ... ayn\u0131 HTTP sunucu mant\u0131\u011f\u0131\n              }).listen(8443, () => {\n                  console.log('HTTPS sunucusu 8443 portunda \u00e7al\u0131\u015f\u0131yor');\n              });\n            <\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>Mobil Uyumlu Tasar\u0131m \u0130\u00e7in HTML ve CSS \u0130pu\u00e7lar\u0131<\/h3>\n<p>Sunucu taraf\u0131ndaki performans ve g\u00fcvenlik kadar, istemci taraf\u0131ndaki kullan\u0131c\u0131 deneyimi de \u00f6nemlidir. Mobil cihazlarda iyi g\u00f6r\u00fcnen ve \u00e7al\u0131\u015fan web siteleri olu\u015fturmak i\u00e7in:<\/p>\n<ol>\n<li><strong>Duyarl\u0131 Tasar\u0131m (Responsive Design):<\/strong> CSS Media Query&#8217;ler kullanarak farkl\u0131 ekran boyutlar\u0131na g\u00f6re stil kurallar\u0131 uygulay\u0131n.\n<pre><code>\n              \/* style.css dosyan\u0131za ekleyebilirsiniz *\/\n              \/* Genel stiller *\/\n              body {\n                  font-size: 16px;\n              }\n\n              \/* K\u00fc\u00e7\u00fck ekranlar i\u00e7in (\u00f6rne\u011fin mobil cihazlar) *\/\n              @media (max-width: 600px) {\n                  body {\n                      font-size: 14px;\n                      padding: 10px;\n                  }\n                  h1 {\n                      font-size: 1.5em;\n                  }\n              }\n\n              \/* Orta ekranlar i\u00e7in (\u00f6rne\u011fin tabletler) *\/\n              @media (min-width: 601px) and (max-width: 1024px) {\n                  body {\n                      font-size: 15px;\n                  }\n                  h1 {\n                      font-size: 2em;\n                  }\n              }\n            <\/code><\/pre>\n<\/li>\n<li><strong>Meta Viewport Etiketi:<\/strong> HTML&#8217;nizin <code>&lt;head&gt;<\/code> b\u00f6l\u00fcm\u00fcne a\u015fa\u011f\u0131daki etiketi ekleyerek taray\u0131c\u0131ya sayfan\u0131n cihaz geni\u015fli\u011fine g\u00f6re \u00f6l\u00e7eklenmesi gerekti\u011fini bildirin:\n<pre><code>\n              &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n            <\/code><\/pre>\n<\/li>\n<li><strong>Mobil \u00d6ncelikli Geli\u015ftirme (Mobile-First):<\/strong> Tasar\u0131m ve geli\u015ftirmeye en k\u00fc\u00e7\u00fck ekran boyutundan ba\u015flayarak, daha b\u00fcy\u00fck ekranlara do\u011fru ilerlemek, daha temiz ve performansl\u0131 bir kod taban\u0131 sa\u011flar.<\/li>\n<\/ol>\n<p>Bu performans ve g\u00fcvenlik ipu\u00e7lar\u0131, Node.js HTTP mod\u00fcl\u00fc ile olu\u015fturdu\u011funuz sunucunun sadece \u00e7al\u0131\u015fmas\u0131n\u0131 de\u011fil, ayn\u0131 zamanda ger\u00e7ek d\u00fcnya senaryolar\u0131nda g\u00fcvenilir ve verimli bir \u015fekilde hizmet vermesini de sa\u011flayacakt\u0131r. Unutmay\u0131n ki g\u00fcvenlik ve performans s\u00fcrekli bir s\u00fcre\u00e7tir ve uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e bu alanlara daha fazla yat\u0131r\u0131m yapman\u0131z gerekecektir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Node.js&#8217;in g\u00fcc\u00fcn\u00fc ve yerle\u015fik HTTP mod\u00fcl\u00fcn\u00fcn esnekli\u011fini kullanarak s\u0131f\u0131rdan bir web sunucusu olu\u015fturmay\u0131 ad\u0131m ad\u0131m \u00f6\u011frendik. Temel &#8220;Merhaba D\u00fcnya&#8221; sunucusundan ba\u015flayarak, istekleri ve yan\u0131tlar\u0131 nas\u0131l y\u00f6netece\u011fimizi, farkl\u0131 URL&#8217;ler i\u00e7in dinamik routing nas\u0131l yapaca\u011f\u0131m\u0131z\u0131 ve hatta statik dosyalar\u0131 nas\u0131l sunaca\u011f\u0131m\u0131z\u0131 ke\u015ffettik. Ayr\u0131ca, sunucunuzu daha dayan\u0131kl\u0131, h\u0131zl\u0131 ve g\u00fcvenli hale getirmek i\u00e7in performans ve g\u00fcvenlik ipu\u00e7lar\u0131n\u0131 da ele ald\u0131k. Mobil uyumlu tasar\u0131m\u0131n \u00f6nemine de\u011finerek, kullan\u0131c\u0131 deneyimini iyile\u015ftirmenin yollar\u0131n\u0131 da g\u00f6rd\u00fck.<\/p>\n<p>Node.js HTTP mod\u00fcl\u00fc, web sunucusu geli\u015ftirmenin temellerini anlamak i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r. Daha karma\u015f\u0131k uygulamalar i\u00e7in Express.js, Koa.js gibi framework&#8217;ler bu mod\u00fcl\u00fcn \u00fczerine in\u015fa edilmi\u015ftir ve size daha fazla kolayl\u0131k, yap\u0131 ve geni\u015fletilebilirlik sunar. Ancak temel mod\u00fcl\u00fc anlamak, bu framework&#8217;lerin perde arkas\u0131nda nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na dair de\u011ferli bir i\u00e7g\u00f6r\u00fc sa\u011flar ve sizi daha yetkin bir Node.js geli\u015ftiricisi yapar. Kendi sunucunuzu olu\u015fturma yolculu\u011funuzda edindi\u011finiz bu bilgilerle, art\u0131k daha karma\u015f\u0131k web projelerine ad\u0131m atmaya haz\u0131rs\u0131n\u0131z. Unutmay\u0131n, pratik yapmak ve farkl\u0131 senaryolar\u0131 denemek, \u00f6\u011frenmenin en iyi yoludur. \u0130yi kodlamalar!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<div class=\"faq-item\">\n<h4>Node.js HTTP mod\u00fcl\u00fc ile Express.js aras\u0131ndaki temel fark nedir?<\/h4>\n<p>Node.js HTTP mod\u00fcl\u00fc, bir HTTP sunucusu olu\u015fturmak i\u00e7in gereken en temel i\u015flevleri (istek\/yan\u0131t i\u015fleme, port dinleme vb.) sa\u011flayan yerle\u015fik bir mod\u00fcld\u00fcr. Express.js ise, HTTP mod\u00fcl\u00fcn\u00fcn \u00fczerine in\u015fa edilmi\u015f, routing, ara yaz\u0131l\u0131m (middleware) y\u00f6netimi, \u015fablon motoru entegrasyonu gibi bir\u00e7ok ek \u00f6zellik ve kolayl\u0131k sunan bir web framework&#8217;\u00fcd\u00fcr. HTTP mod\u00fcl\u00fc &#8220;ham&#8221; bir API iken, Express.js geli\u015ftirme s\u00fcrecini h\u0131zland\u0131ran ve daha organize hale getiren bir soyutlama katman\u0131 sunar.<\/p>\n<\/p><\/div>\n<div class=\"faq-item\">\n<h4>HTTP mod\u00fcl\u00fc ile kurdu\u011fum sunucuyu \u00fcretim ortam\u0131nda kullanabilir miyim?<\/h4>\n<p>Teorik olarak evet, ancak pratik olarak k\u00fc\u00e7\u00fck ve \u00e7ok basit projeler d\u0131\u015f\u0131nda \u00f6nerilmez. HTTP mod\u00fcl\u00fc ile kurulan sunucular, hata y\u00f6netimi, g\u00fcvenlik ba\u015fl\u0131klar\u0131, oturum y\u00f6netimi, dosya y\u00fckleme, veritaban\u0131 entegrasyonu gibi bir\u00e7ok geli\u015fmi\u015f \u00f6zelli\u011fi manuel olarak uygulaman\u0131z\u0131 gerektirir. Bu da zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k olabilir. \u00dcretim ortam\u0131nda genellikle Express.js gibi daha olgun ve kapsaml\u0131 framework&#8217;ler tercih edilir, \u00e7\u00fcnk\u00fc bunlar bu t\u00fcr g\u00f6revler i\u00e7in sa\u011flam ve test edilmi\u015f \u00e7\u00f6z\u00fcmler sunar.<\/p>\n<\/p><\/div>\n<div class=\"faq-item\">\n<h4>Node.js sunucumun performans\u0131n\u0131 art\u0131rmak i\u00e7in ba\u015fka neler yapabilirim?<\/h4>\n<p>Performans\u0131 art\u0131rmak i\u00e7in birka\u00e7 yol vard\u0131r:<\/p>\n<ul>\n<li><strong>\u00d6l\u00e7eklendirme:<\/strong> Node.js tek i\u015f par\u00e7ac\u0131kl\u0131 oldu\u011fu i\u00e7in, CPU&#8217;nun t\u00fcm \u00e7ekirdeklerini kullanmak \u00fczere <code>cluster<\/code> mod\u00fcl\u00fcn\u00fc kullanarak birden fazla Node.js i\u015flemi \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/li>\n<li><strong>Veritaban\u0131 ve Harici API Optimizasyonlar\u0131:<\/strong> Veritaban\u0131 sorgular\u0131n\u0131z\u0131 optimize edin, harici API \u00e7a\u011fr\u0131lar\u0131n\u0131 \u00f6nbelle\u011fe al\u0131n veya paralel hale getirin.<\/li>\n<li><strong>Statik Dosya Sunumu \u0130\u00e7in Nginx\/CDN Kullan\u0131m\u0131:<\/strong> Statik dosyalar\u0131 do\u011frudan Node.js sunmak yerine, Nginx gibi bir ters proxy sunucu veya bir \u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131 (CDN) kullanarak sunmak, Node.js sunucunuzun y\u00fck\u00fcn\u00fc azalt\u0131r ve daha h\u0131zl\u0131 yan\u0131t s\u00fcreleri sa\u011flar.<\/li>\n<li><strong>Kod Optimizasyonu:<\/strong> Performans\u0131 etkileyen &#8220;hot path&#8221; kod bloklar\u0131n\u0131 optimize edin, gereksiz hesaplamalardan ka\u00e7\u0131n\u0131n.<\/li>\n<\/ul>\n<\/p><\/div>\n<div class=\"faq-item\">\n<h4>Sunucumda hata olu\u015ftu\u011funda ne yapmal\u0131y\u0131m?<\/h4>\n<p>Hata y\u00f6netimi kritik \u00f6neme sahiptir.<\/p>\n<ul>\n<li><strong><code>try-catch<\/code> bloklar\u0131:<\/strong> Senkron kodlardaki hatalar\u0131 yakalamak i\u00e7in kullan\u0131n.<\/li>\n<li><strong>Promises\/async-await ile hata yakalama:<\/strong> Asenkron i\u015flemlerde <code>.catch()<\/code> metodu veya <code>try-catch<\/code> ile <code>await<\/code> kullan\u0131n.<\/li>\n<li><strong>Global Hata Yakalay\u0131c\u0131lar:<\/strong> Node.js&#8217;in <code>process.on('uncaughtException', ...)<\/code> ve <code>process.on('unhandledRejection', ...)<\/code> olaylar\u0131n\u0131 kullanarak yakalanmayan hatalar\u0131 ve reddedilen Promise&#8217;lar\u0131 yakalay\u0131n. Bu sayede sunucunuzun aniden \u00e7\u00f6kmesini engelleyebilir ve hatalar\u0131 loglayarak sorun giderme s\u00fcrecini kolayla\u015ft\u0131rabilirsiniz.<\/li>\n<li><strong>Hata mesajlar\u0131n\u0131 gizleme:<\/strong> \u00dcretim ortam\u0131nda, istemcilere ayr\u0131nt\u0131l\u0131 hata mesajlar\u0131 g\u00f6ndermek yerine genel bir hata mesaj\u0131 (\u00f6rne\u011fin &#8220;Sunucuda bir hata olu\u015ftu&#8221;) g\u00f6sterin. Detayl\u0131 hata mesajlar\u0131 hassas bilgiler i\u00e7erebilir.<\/li>\n<\/ul>\n<\/p><\/div>\n<div class=\"faq-item\">\n<h4>HTTPS ba\u011flant\u0131lar\u0131n\u0131 nas\u0131l kurabilirim?<\/h4>\n<p>HTTPS, HTTP mod\u00fcl\u00fc yerine Node.js&#8217;in <code>https<\/code> mod\u00fcl\u00fc kullan\u0131larak kurulur. Bu mod\u00fcl, sunucunuzu SSL\/TLS sertifikalar\u0131 ile g\u00fcvenli hale getirmenizi sa\u011flar. Bir HTTPS sunucusu olu\u015fturmak i\u00e7in, bir SSL sertifikas\u0131na (<code>.crt<\/code> veya <code>.pem<\/code> uzant\u0131l\u0131) ve \u00f6zel anahtar\u0131na (<code>.key<\/code> uzant\u0131l\u0131) ihtiyac\u0131n\u0131z vard\u0131r. Bu dosyalar\u0131 bir sertifika yetkilisinden (CA) alabilir veya geli\u015ftirme i\u00e7in kendinden imzal\u0131 sertifikalar olu\u015fturabilirsiniz. Daha sonra bu sertifika ve anahtar\u0131 <code>https.createServer()<\/code> metoduna se\u00e7enekler olarak ileterek g\u00fcvenli sunucunuzu ba\u015flatabilirsiniz.<\/p>\n<\/p><\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Node.js HTTP Mod\u00fcl\u00fc ile Web Sunucusu Olu\u015fturma Rehberi G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda her web sitesi, mobil uygulama ve hatta&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[136],"tags":[],"class_list":{"0":"post-33754","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-node-js","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?<\/title>\n<meta name=\"description\" content=\"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda her web sitesi, mobil uygulama ve hatta IoT cihaz\u0131, arka planda \u00e7al\u0131\u015fan bir sunucuya ihtiya\u00e7 duyar. Peki, kendi web sunucunuzu s\u0131f\u0131rdan olu\u015fturman\u0131n ne kadar kolay oldu\u011funu hi\u00e7 d\u00fc\u015f\u00fcnd\u00fcn\u00fcz m\u00fc? \u00d6zellikle Node.js ve yerle\u015fik HTTP mod\u00fcl\u00fc ile bu s\u00fcre\u00e7, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden \u00e7ok daha basit ve eri\u015filebilir hale geliyor. Bu kapsaml\u0131 rehberde, Node.js&#039;in g\u00fcc\u00fcn\u00fc kullanarak kendi web sunucunuzu nas\u0131l ad\u0131m ad\u0131m kuraca\u011f\u0131n\u0131z\u0131, istekleri nas\u0131l y\u00f6netece\u011finizi ve hatta ileri d\u00fczey optimizasyonlar\u0131 nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ke\u015ffedeceksiniz. Haz\u0131r m\u0131s\u0131n\u0131z? Kendi sunucunuzu in\u015fa etme yolculu\u011funa ba\u015flayal\u0131m!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda her web sitesi, mobil uygulama ve hatta IoT cihaz\u0131, arka planda \u00e7al\u0131\u015fan bir sunucuya ihtiya\u00e7 duyar. Peki, kendi web sunucunuzu s\u0131f\u0131rdan olu\u015fturman\u0131n ne kadar kolay oldu\u011funu hi\u00e7 d\u00fc\u015f\u00fcnd\u00fcn\u00fcz m\u00fc? \u00d6zellikle Node.js ve yerle\u015fik HTTP mod\u00fcl\u00fc ile bu s\u00fcre\u00e7, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden \u00e7ok daha basit ve eri\u015filebilir hale geliyor. Bu kapsaml\u0131 rehberde, Node.js&#039;in g\u00fcc\u00fcn\u00fc kullanarak kendi web sunucunuzu nas\u0131l ad\u0131m ad\u0131m kuraca\u011f\u0131n\u0131z\u0131, istekleri nas\u0131l y\u00f6netece\u011finizi ve hatta ileri d\u00fczey optimizasyonlar\u0131 nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ke\u015ffedeceksiniz. Haz\u0131r m\u0131s\u0131n\u0131z? Kendi sunucunuzu in\u015fa etme yolculu\u011funa ba\u015flayal\u0131m!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-06T13:23:24+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?\",\"datePublished\":\"2025-11-06T13:23:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/\"},\"wordCount\":4274,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Node.js\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/\",\"name\":\"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-06T13:23:24+00:00\",\"description\":\"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda her web sitesi, mobil uygulama ve hatta IoT cihaz\u0131, arka planda \u00e7al\u0131\u015fan bir sunucuya ihtiya\u00e7 duyar. Peki, kendi web sunucunuzu s\u0131f\u0131rdan olu\u015fturman\u0131n ne kadar kolay oldu\u011funu hi\u00e7 d\u00fc\u015f\u00fcnd\u00fcn\u00fcz m\u00fc? \u00d6zellikle Node.js ve yerle\u015fik HTTP mod\u00fcl\u00fc ile bu s\u00fcre\u00e7, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden \u00e7ok daha basit ve eri\u015filebilir hale geliyor. Bu kapsaml\u0131 rehberde, Node.js'in g\u00fcc\u00fcn\u00fc kullanarak kendi web sunucunuzu nas\u0131l ad\u0131m ad\u0131m kuraca\u011f\u0131n\u0131z\u0131, istekleri nas\u0131l y\u00f6netece\u011finizi ve hatta ileri d\u00fczey optimizasyonlar\u0131 nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ke\u015ffedeceksiniz. Haz\u0131r m\u0131s\u0131n\u0131z? Kendi sunucunuzu in\u015fa etme yolculu\u011funa ba\u015flayal\u0131m!\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?","description":"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda her web sitesi, mobil uygulama ve hatta IoT cihaz\u0131, arka planda \u00e7al\u0131\u015fan bir sunucuya ihtiya\u00e7 duyar. Peki, kendi web sunucunuzu s\u0131f\u0131rdan olu\u015fturman\u0131n ne kadar kolay oldu\u011funu hi\u00e7 d\u00fc\u015f\u00fcnd\u00fcn\u00fcz m\u00fc? \u00d6zellikle Node.js ve yerle\u015fik HTTP mod\u00fcl\u00fc ile bu s\u00fcre\u00e7, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden \u00e7ok daha basit ve eri\u015filebilir hale geliyor. Bu kapsaml\u0131 rehberde, Node.js'in g\u00fcc\u00fcn\u00fc kullanarak kendi web sunucunuzu nas\u0131l ad\u0131m ad\u0131m kuraca\u011f\u0131n\u0131z\u0131, istekleri nas\u0131l y\u00f6netece\u011finizi ve hatta ileri d\u00fczey optimizasyonlar\u0131 nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ke\u015ffedeceksiniz. Haz\u0131r m\u0131s\u0131n\u0131z? Kendi sunucunuzu in\u015fa etme yolculu\u011funa ba\u015flayal\u0131m!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/","og_locale":"tr_TR","og_type":"article","og_title":"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?","og_description":"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda her web sitesi, mobil uygulama ve hatta IoT cihaz\u0131, arka planda \u00e7al\u0131\u015fan bir sunucuya ihtiya\u00e7 duyar. Peki, kendi web sunucunuzu s\u0131f\u0131rdan olu\u015fturman\u0131n ne kadar kolay oldu\u011funu hi\u00e7 d\u00fc\u015f\u00fcnd\u00fcn\u00fcz m\u00fc? \u00d6zellikle Node.js ve yerle\u015fik HTTP mod\u00fcl\u00fc ile bu s\u00fcre\u00e7, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden \u00e7ok daha basit ve eri\u015filebilir hale geliyor. Bu kapsaml\u0131 rehberde, Node.js'in g\u00fcc\u00fcn\u00fc kullanarak kendi web sunucunuzu nas\u0131l ad\u0131m ad\u0131m kuraca\u011f\u0131n\u0131z\u0131, istekleri nas\u0131l y\u00f6netece\u011finizi ve hatta ileri d\u00fczey optimizasyonlar\u0131 nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ke\u015ffedeceksiniz. Haz\u0131r m\u0131s\u0131n\u0131z? Kendi sunucunuzu in\u015fa etme yolculu\u011funa ba\u015flayal\u0131m!","og_url":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-06T13:23:24+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?","datePublished":"2025-11-06T13:23:24+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/"},"wordCount":4274,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Node.js"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/","url":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/","name":"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-06T13:23:24+00:00","description":"G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda her web sitesi, mobil uygulama ve hatta IoT cihaz\u0131, arka planda \u00e7al\u0131\u015fan bir sunucuya ihtiya\u00e7 duyar. Peki, kendi web sunucunuzu s\u0131f\u0131rdan olu\u015fturman\u0131n ne kadar kolay oldu\u011funu hi\u00e7 d\u00fc\u015f\u00fcnd\u00fcn\u00fcz m\u00fc? \u00d6zellikle Node.js ve yerle\u015fik HTTP mod\u00fcl\u00fc ile bu s\u00fcre\u00e7, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden \u00e7ok daha basit ve eri\u015filebilir hale geliyor. Bu kapsaml\u0131 rehberde, Node.js'in g\u00fcc\u00fcn\u00fc kullanarak kendi web sunucunuzu nas\u0131l ad\u0131m ad\u0131m kuraca\u011f\u0131n\u0131z\u0131, istekleri nas\u0131l y\u00f6netece\u011finizi ve hatta ileri d\u00fczey optimizasyonlar\u0131 nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ke\u015ffedeceksiniz. Haz\u0131r m\u0131s\u0131n\u0131z? Kendi sunucunuzu in\u015fa etme yolculu\u011funa ba\u015flayal\u0131m!","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-ve-http-modulu-temel-kavramlar-nelerdir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js ve HTTP Mod\u00fcl\u00fc: Temel Kavramlar Nelerdir?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33754","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33754"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33754\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33754"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33754"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33754"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}