TuZaKK 1
TuZaKK
sermin 1
sermin
berkmenoo 1
berkmenoo
mannaxxx 1
mannaxxx
Agora Metin2 1
Agora Metin2
[DEV]AB 1
[DEV]AB
kaptanmikro1 1
kaptanmikro1
Hikaye Ekle

[NODE JS] HTTP Headers Nedir ve Nasil Ayarlanir?

  • Konuyu başlatan Konuyu başlatan Silverhand
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 1
  • Görüntüleme Görüntüleme 11

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

nodejs.png


[NODE JS] HTTP Headers Nedir ve Nasil Ayarlanir?​


Herkese merhaba, bugun HTTP header'larini detayli inceleyecegiz. Header'lar HTTP iletisiminin gorunmeyen ama cok onemli bir parcasidir. Icerik tipi, cache politikasi, guvenlik ayarlari, kimlik dogrulama bilgileri hep header'lar araciligiyla iletilir. Ben junior iken header'lari hic onemsemedim ama production'da cache sorunlari, CORS hatalari ve guvenlik aciklari yasadikca onemlerini kavradim.

Request ve Response Header'lari​


HTTP header'lari iki yonluder: request header'lari client'tan sunucuya, response header'lari sunucudan client'a gider. Request header'lari "ben suyum, sunu istiyorum, su formati anliyorum" der. Response header'lari ise "iste aldik, icerik tipi su, cache politikasi su" der. Dogru header kullanimi uygulamanizin dogru calismasi, guvenli olmasi ve performansli olmasi icin kritiktir.

JavaScript:
const http = require('http');

const sunucu = http.createServer((req, res) => {
    // ===== REQUEST HEADER'LARI OKUMA =====
    console.log('=== Request Headers ===');
    console.log('Method:', req.method);
    console.log('URL:', req.url);
    console.log('HTTP Version:', req.httpVersion);

    // Tek bir header okuma (kucuk harfle!)
    console.log('Host:', req.headers['host']);
    console.log('User-Agent:', req.headers['user-agent']);
    console.log('Accept:', req.headers['accept']);
    console.log('Content-Type:', req.headers['content-type']);
    console.log('Authorization:', req.headers['authorization']);
    console.log('Cookie:', req.headers['cookie']);

    // Tum header'lari listeleme
    // Object.entries(req.headers).forEach(([k, v]) => console.log(`  ${k}: ${v}`));

    // ===== RESPONSE HEADER'LARI AYARLAMA =====

    // Yontem 1: writeHead ile toplu ayarlama
    // res.writeHead(200, {
    //     'Content-Type': 'application/json',
    //     'Cache-Control': 'no-cache'
    // });

    // Yontem 2: setHeader ile tek tek ayarlama
    res.setHeader('Content-Type', 'application/json; charset=utf-8');
    res.setHeader('X-Powered-By', 'Node.js');
    res.setHeader('X-Request-Id', Date.now().toString());

    // Guvenlik header'lari
    res.setHeader('X-Content-Type-Options', 'nosniff');
    res.setHeader('X-Frame-Options', 'DENY');
    res.setHeader('X-XSS-Protection', '1; mode=block');
    res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
    res.setHeader('Content-Security-Policy', "default-src 'self'");

    // Cache header'lari
    res.setHeader('Cache-Control', 'public, max-age=3600');
    res.setHeader('ETag', '"abc123"');

    // CORS header'lari
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');

    // Header silme
    // res.removeHeader('X-Powered-By');

    // Header var mi kontrol
    console.log('\nContent-Type ayarlandi mi?', res.hasHeader('Content-Type'));

    res.statusCode = 200;
    res.end(JSON.stringify({
        mesaj: 'Header ornegi',
        istek_basliklari: {
            host: req.headers['host'],
            userAgent: req.headers['user-agent']
        }
    }, null, 2));
});

sunucu.listen(3000, () => {
    console.log('Sunucu calisiyor: http://localhost:3000');
});

Onemli Header'lar ve Kullanim Alanlari​


Pratikte en cok kullanacaginiz header'lari ve ne ise yaradiklarini bilmek gerekir. Ben her projede su header'lari ayarliyorum: Content-Type, Cache-Control, guvenlik header'lari (X-Content-Type-Options, X-Frame-Options) ve CORS header'lari. Bunlarsiz bir API sunucusu production'a cikmamali.

JavaScript:
const http = require('http');

// Header helper fonksiyonlari
function guvenlikHeaderlari(res) {
    res.setHeader('X-Content-Type-Options', 'nosniff');
    res.setHeader('X-Frame-Options', 'DENY');
    res.setHeader('X-XSS-Protection', '1; mode=block');
    res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
    res.setHeader('Permissions-Policy', 'camera=(), microphone=(), geolocation=()');
}

function corsHeaderlari(res, izinVerilenOrigin = '*') {
    res.setHeader('Access-Control-Allow-Origin', izinVerilenOrigin);
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    res.setHeader('Access-Control-Max-Age', '86400'); // 24 saat preflight cache
}

function cacheHeaderlari(res, sure = 3600) {
    if (sure === 0) {
        res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
        res.setHeader('Pragma', 'no-cache');
    } else {
        res.setHeader('Cache-Control', `public, max-age=${sure}`);
    }
}

// Content negotiation
function icerikTipiBelirleme(req) {
    const accept = req.headers['accept'] || '';

    if (accept.includes('application/json')) return 'json';
    if (accept.includes('text/html')) return 'html';
    if (accept.includes('text/xml')) return 'xml';
    return 'json'; // varsayilan
}

const sunucu = http.createServer((req, res) => {
    // Guvenlik header'larini her istekte ayarla
    guvenlikHeaderlari(res);
    corsHeaderlari(res);

    // API icin cache'i kapat
    if (req.url.startsWith('/api/')) {
        cacheHeaderlari(res, 0);
    }

    // Statik dosyalar icin cache ac
    if (req.url.startsWith('/static/')) {
        cacheHeaderlari(res, 86400); // 1 gun
    }

    // Content negotiation
    const icerikTipi = icerikTipiBelirleme(req);
    const veri = { mesaj: 'Merhaba', zaman: new Date().toISOString() };

    if (icerikTipi === 'html') {
        res.setHeader('Content-Type', 'text/html; charset=utf-8');
        res.end(`<html><body><h1>${veri.mesaj}</h1><p>${veri.zaman}</p></body></html>`);
    } else {
        res.setHeader('Content-Type', 'application/json; charset=utf-8');
        res.end(JSON.stringify(veri, null, 2));
    }
});

sunucu.listen(3000, () => {
    console.log('Sunucu calisiyor: http://localhost:3000');
});

Pratik Ipuclari​


Header isimleri case-insensitive'dir, yani 'Content-Type' ile 'content-type' aynidir. Ama convention olarak buyuk harfle baslayan format kullanilir. req.headers'daki tum anahtarlar kucuk harfe cevirilir, bunu unutmayin. Ozel header'larinizi X- on ekiyle adlandirin, her ne kadar bu convention artik resmi olarak kaldirilmis olsa da hala yaygin olarak kullaniliyor.

Son olarak, production'da header'larinizi duzenli olarak securityheaders.com gibi araclarla kontrol edin. Eksik guvenlik header'lari saldiri yuzeyinizi genisletir. Bu kadar bu konu icin, siradaki konumuz JSON API sunucusu yazma!
 
Emeğiniz ve katkınız için teşekkür ederiz!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar! 🎉
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst