在Eleventy中配置HSTS响应头失败,求可行解决方案
为Eleventy站点添加HSTS响应头的可行方案
1. 部署平台直接配置(最可靠)
Eleventy生成静态文件,响应头通常由部署平台控制,直接在平台配置是最稳妥的方式:
- Netlify:在根目录创建
netlify.toml,写入以下内容:[[headers]] for = "/*" [headers.values] Strict-Transport-Security = "max-age=31536000; includeSubDomains; preload" - Vercel:创建
vercel.json文件,配置如下:{ "headers": [ { "source": "/(.*)", "headers": [ { "key": "Strict-Transport-Security", "value": "max-age=31536000; includeSubDomains; preload" } ] } ] } - GitHub Pages:需通过Cloudflare代理站点,在Cloudflare后台「规则」-「转换规则」-「修改响应头」中新增规则,添加
Strict-Transport-Security头并填入目标值。
2. 本地开发调试的中间件修正
如果之前的Eleventy中间件未生效,大概率是配置写法错误,以下是Eleventy v2+的正确配置:
在eleventy.js中添加:
module.exports = function(eleventyConfig) { eleventyConfig.setServerOptions({ middleware: [ function(req, res, next) { res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload'); next(); } ] }); };
注意:本地开发需启用HTTPS(执行
npx @11ty/eleventy --serve --https),否则浏览器会忽略HSTS头。
3. 修正_headers文件的使用方式
若你用Netlify等支持_headers的平台,需确保文件被正确复制到输出目录:
- 在
eleventy.js中添加复制规则:eleventyConfig.addPassthroughCopy("_headers"); _headers文件内容格式如下:/* Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
4. 插件配置(辅助生成平台配置文件)
使用eleventy-plugin-response-headers插件自动生成适配平台的响应头配置:
- 安装插件:
npm install eleventy-plugin-response-headers --save-dev - 在
eleventy.js中配置:const responseHeadersPlugin = require('eleventy-plugin-response-headers'); module.exports = function(eleventyConfig) { eleventyConfig.addPlugin(responseHeadersPlugin, { headers: { 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload' } }); };
该插件会自动生成对应平台的配置文件(如Netlify的
_headers、Vercel的vercel.json),需部署后验证生效。
验证方法
部署完成后,可通过两种方式确认:
- 打开浏览器开发者工具「网络」面板,查看请求的响应头是否包含
Strict-Transport-Security; - 在终端执行
curl -I https://你的域名,查看输出的响应头。
内容的提问来源于stack exchange,提问作者chemuel castillo
相关产品推荐
相关产品推荐

