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!
[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!
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)
Benzer konular
- Cevaplar
- 1
- Görüntüleme
- 281
- Cevaplar
- 3
- Görüntüleme
- 73
- Cevaplar
- 0
- Görüntüleme
- 180
Altın Konu
Next.js'de API Oluşturma Ve Kullanma
- Cevaplar
- 12
- Görüntüleme
- 1K
