📋 HTTP响应头检测
响应头查看 · 安全头检测 · 解读说明
受浏览器CORS限制,仅显示前端可读取的响应头
响应头查看 · 安全头检测 · 解读说明
受浏览器CORS限制,仅显示前端可读取的响应头
和运维最相关的:Content-Type(内容类型)、Content-Encoding(压缩方式)、Cache-Control(缓存策略)、Set-Cookie(Cookie)、Server(服务器)、X-Frame-Options(防点击劫持)、Content-Security-Policy(CSP,防XSS)、Strict-Transport-Security(HSTS,强制HTTPS)。
关系到核心安全。X-Frame-Options防点击劫持,CSP防XSS和注入,HSTS防明文回退,X-Content-Type-Options防MIME嗅探。少配这些安全头,网站在攻击者眼中就是"裸奔"。尤其对登录、支付类页面,安全响应头是标配。
浏览器CORS策略限制前端JavaScript只能读取部分响应头(如Content-Type、Cache-Control等白名单头)。Set-Cookie和部分自定义头在前端拿不到,需要命令行(curl -I)或后端代理才能看全。
max-age=N表示浏览器可以把资源缓存N秒,期间刷新不再请求服务器。它是前端性能优化最常用的响应头之一。配合ETag/Last-Modified做协商缓存,能大幅减少重复请求。
CSP是你给浏览器下的一道"白名单",允许哪些来源的脚本、图片、样式能加载。正确配置后,即使被注入了恶意脚本,浏览器也会因为来源不在白名单而拒绝执行,是防XSS最有效的手段之一。
两者都能,X-Frame-Options只有DENY/SAMEORIGIN几个值,简单但够用;CSP的frame-ancestors更灵活,还能指定多个允许来源。现代站点推荐用CSP的frame-ancestors,两者同时配置也常见。
Server头会暴露服务器软件和版本,攻击者能据此定向找该版本的已知漏洞。X-Powered-By同样暴露PHP/ASP等后端。建议在生产环境隐藏或混淆,减少被针对性攻击的风险。
用 curl -I 网址 只显示头;curl -i 网址 连头带体一起显示。这样能绕过浏览器限制看到Set-Cookie、完整Server等所有响应头,是后端排查的标准姿势。
安全响应头是Web安全的"标配",一旦部署正确,能挡住大量常见攻击。每项安全头都有明确的防护目标:
| 响应头 | 防护目标 | 推荐值 | 缺失风险 |
|---|---|---|---|
| Strict-Transport-Security | 强制HTTPS,防SSL剥离 | max-age=31536000; includeSubDomains | 用户可能被劫持到HTTP明文连接 |
| Content-Security-Policy | 防XSS和数据注入 | default-src 'self'; script-src 'self' | 恶意脚本可在页面中执行 |
| X-Frame-Options | 防点击劫持 | DENY 或 SAMEORIGIN | 页面可被嵌入恶意iframe |
| X-Content-Type-Options | 防MIME类型嗅探 | nosniff | 浏览器可能错误解析文件类型 |
| Referrer-Policy | 控制Referer发送粒度 | strict-origin-when-cross-origin | 跨域请求泄漏完整路径信息 |
| Permissions-Policy | 控制浏览器API权限 | camera=(), microphone=() | 第三方脚本可能调用敏感API |
这些安全头不需要全部配,但对有登录、支付、表单的页面,至少把HSTS、CSP、X-Frame-Options这三项配好,安全等级就能提升一大截。
HTTP缓存分"强缓存"和"协商缓存"两条路,由不同的响应头控制。理解它们才能设计出好的缓存策略。
| 资源类型 | 推荐缓存头 | 说明 |
|---|---|---|
| 页面HTML | no-cache(协商缓存) | 保证内容最新 |
| CSS/JS/图片 | max-age=31536000 | 做强缓存+版本号 |
| API接口 | no-cache | 每次回源校验 |
| logo/图标 | 长期max-age | 几乎不变 |
最佳实践:HTML文件用no-cache做协商缓存(保证内容最新),静态资源(CSS/JS/图片)用max-age做强缓存并配合版本号更新。
CORS(Cross-Origin Resource Sharing)是现代Web中跨域请求的标准机制。浏览器默认禁止跨域AJAX,必须服务器在响应头中明确授权:
| 响应头 | 作用 | 注意点 |
|---|---|---|
| Access-Control-Allow-Origin | 允许的来源 | * 时不能带Cookie |
| Access-Control-Allow-Methods | 允许的HTTP方法 | 须覆盖实际用到的方法 |
| Access-Control-Allow-Headers | 允许的请求头 | 自定义头须逐一列出 |
| Access-Control-Allow-Credentials | 是否允许Cookie | 为true时Origin不能是* |
| Access-Control-Max-Age | 预检缓存时间 | 减少重复OPTIONS |
前后端分离项目中,后端API务必正确配置CORS,否则前端请求全被浏览器拦截。生产环境千万别图省事配Origin: *,要精确到自己的域名。
Server响应头会直接暴露Web服务器软件和版本号,如"nginx/1.18.0"或"Apache/2.4.41"。这对攻击者是极大的便利——他们可以精确定位已知版本的漏洞来攻击。
| 服务器 | 指令 | 效果 |
|---|---|---|
| Nginx | server_tokens off | 只显示 nginx,无版本号 |
| Apache | ServerTokens Prod | 隐藏详细版本 |
| PHP | expose_php = Off | 隐藏 X-Powered-By |
| 自定义 | more_set_headers | 改成任意字符串 |
隐藏Server头是纵深防御的一部分,虽然不能挡住真正有决心的攻击者,但能让大部分自动化扫描器绕道。成本极低,值得做。
| 响应头 | 检查项 | 状态判断 | 处理建议 |
|---|---|---|---|
| Strict-Transport-Security | 是否返回HSTS头 | ✅ 有 / ❌ 缺失 | Nginx: add_header Strict-Transport-Security ... |
| Content-Security-Policy | 是否配置CSP策略 | ✅ 有 / ❌ 缺失 | 从default-src 'self'开始逐步收紧 |
| X-Frame-Options | 是否防护点击劫持 | ✅ DENY/SAMEORIGIN / ❌ 缺失 | 加 add_header X-Frame-Options SAMEORIGIN |
| X-Content-Type-Options | 是否设为nosniff | ✅ nosniff / ❌ 缺失 | 加 add_header X-Content-Type-Options nosniff |
| Referrer-Policy | 是否限制Referer | ✅ 有 / ❌ 缺失 | 设为strict-origin-when-cross-origin |
| Permissions-Policy | 是否限制浏览器API | ✅ 有 / ❌ 缺失 | 按需禁用不用的API |
| 响应头 | 类别 | 作用 | 示例值 |
|---|---|---|---|
| Content-Type | 内容 | 声明响应体MIME类型和编码 | text/html; charset=utf-8 |
| Content-Encoding | 压缩 | 响应体压缩算法 | gzip, br, deflate |
| Cache-Control | 缓存 | 缓存策略指令 | max-age=3600, no-cache |
| ETag | 缓存 | 资源的唯一标识,用于协商缓存 | "5d8c72a5-2640" |
| Server | 服务器 | 服务器软件信息 | nginx |
| Set-Cookie | 会话 | 设置客户端Cookie | sessionId=abc123; HttpOnly; Secure |
| Access-Control-Allow-Origin | CORS | 允许跨域请求的来源 | https://www.example.com |
| Via | 代理 | 显示中间代理链路 | 1.1 varnish |
| Age | CDN | 资源在CDN节点已缓存秒数 | 3600 |
1. 输入完整URL(含https://)。
2. 点击"检测响应头"。
3. 查看所有可检测的响应头及其安全/性能解读。
4. 用 curl -I 命令查看浏览器拿不到的完整响应头。