在 Caddy 文件服务器中设置跨域参数(CORS),可以通过在 `Caddyfile` 配置文件中添加 `header` 指令来实现。以下是具体步骤和配置示例:
### 配置步骤
1. **在文件服务器配置块中添加 `header` 指令**
2. **设置以下 CORS 相关头部**:
- `Access-Control-Allow-Origin`:允许跨域请求的源(`*` 表示允许所有域)
- `Access-Control-Allow-Methods`:允许的 HTTP 方法
- `Access-Control-Allow-Headers`:允许的请求头
- `Access-Control-Expose-Headers`:允许客户端访问的响应头
- `Access-Control-Max-Age`:预检请求缓存时间
### 完整配置示例
```c
yourdomain.com {
# 启用文件服务器
root * /path/to/your/files
file_server
# 设置 CORS 头部
header {
Access-Control-Allow-Origin "*"
Access-Control-Allow-Methods "GET, OPTIONS"
Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type"
Access-Control-Expose-Headers "Content-Length,Content-Range"
Access-Control-Max-Age "1728000" # 20天缓存
}
# 处理 OPTIONS 预检请求
@options {
method OPTIONS
}
respond @options 204
}
```
### 关键说明:
1. **`Access-Control-Allow-Origin "*"`**
允许所有域跨域访问(生产环境建议替换为具体域名)
2. **预检请求处理**
`respond @options 204` 直接返回空响应给 OPTIONS 请求
3. **安全建议**:
- 生产环境应将 `*` 替换为具体域名(如 `https://your-frontend.com`)
- 根据需要调整 `Access-Control-Allow-Methods`(如添加 `POST`, `PUT`)
- 静态资源服务通常只需 `GET` 和 `OPTIONS`
### 验证方法
用浏览器开发者工具检查响应头:
```http
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, OPTIONS
...
```
> 💡 根据您之前提到的 NIP 规范(Nostr 实现建议),这种配置特别适合需要公开访问的 nostr 中继服务或媒体资源服务器。如果遇到图片加载问题,建议同时检查 `Content-Type` 头是否正确设置。