Her örnek aynı başlangıç değerlerini ayarlar. Barındırma platformları Strict-Transport-Security’yi zaten gönderiyor olabilir; bu yüzden Vercel, Netlify ve Next.js örneklerinde bu başlık yer almaz. Canlı yanıtı kontrol et ve yalnızca eksikse ekle.
nginx
Satırları HTTPS sunan server bloğuna koy. always parametresi başlıkları hata yanıtlarına da ekler. Kendi add_header satırları olan bir location bloğu, server bloğundan devralınacak tüm add_header satırlarını düşürür; bu yüzden seti orada tekrarla veya tek bir include dosyasında tut.
# In the server block that serves HTTPS (listen 443 ssl)
add_header Strict-Transport-Security "max-age=300" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Apache
mod_headers’ı etkinleştir ve satırları 443 portunun virtual host’una ya da AllowOverride FileInfo ayarlı olduğu yerde .htaccess dosyasına ekle. Header always set hata yanıtlarını ve yönlendirmeleri de kapsar.
# <VirtualHost *:443> or .htaccess; needs mod_headers (Debian/Ubuntu: a2enmod headers)
Header always set Strict-Transport-Security "max-age=300"
Header always set Content-Security-Policy-Report-Only "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Cloudflare
Panelde ana makine adın için bir Response Header Transform Rule oluştur ve her başlığı Set static işlemiyle ekle; bu işlem origin’inden gelen aynı adlı başlığın yerine geçer. HSTS’in SSL/TLS, Edge Certificates altında kendi ayarı vardır; ya onu ya kuralı kullan, ikisini birden değil. Menü adları panel sürümüne göre değişebilir.
Rule type Response Header Transform Rule
When Hostname equals example.com
Then Set static, one row per header:
X-Content-Type-Options nosniff
Referrer-Policy strict-origin-when-cross-origin
X-Frame-Options SAMEORIGIN
Permissions-Policy camera=(), microphone=(), geolocation=()
Content-Security-Policy-Report-Only default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
HSTS SSL/TLS > Edge Certificates > HTTP Strict Transport Security (HSTS)
Vercel
Proje kök dizinindeki vercel.json dosyasına bir headers girdisi ekle. /(.*) kaynak deseni her yolla eşleşir; bazı rotalar farklı bir politika gerektiriyorsa deseni daralt.
{
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "Content-Security-Policy-Report-Only", "value": "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'" },
{ "key": "X-Frame-Options", "value": "SAMEORIGIN" },
{ "key": "X-Content-Type-Options", "value": "nosniff" },
{ "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
{ "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=()" }
]
}
]
}
Netlify
Yayın dizininde, yani Netlify’ın dağıttığı klasörde, _headers adlı bir dosya oluştur. /* gibi her yol satırını girintili Ad: değer satırları izler. Aynı kurallar netlify.toml içinde [[headers]] altında da yer alabilir.
/*
Content-Security-Policy-Report-Only: default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
Next.js
Başlıkları next.config.js içindeki async headers() fonksiyonundan döndür; '/:path*' kaynağı her rotayı kapsar. headers() statik dışa aktarımda (output: 'export') çalışmaz; bu durumda başlıkları dışa aktarılan dosyaları sunan barındırmada ayarla.
// next.config.js
const securityHeaders = [
{ key: 'Content-Security-Policy-Report-Only', value: "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'" },
{ key: 'X-Frame-Options', value: 'SAMEORIGIN' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
{ key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' },
];
module.exports = {
async headers() {
return [{ source: '/:path*', headers: securityHeaders }];
},
};
Yayına aldıktan sonra kontrolü yeniden çalıştır: son yanıtı okuduğu için CDN’inin veya platformunun gerçekte ne gönderdiğini gösterir. Ardından tarayıcının geliştirici araçlarında bir hata sayfası ve bir statik dosya aç, çünkü başlıklar çoğu zaman yalnızca bazı yanıtlar için ayarlanır.