vercel 能反代http吗?默认是https
想用来反代http的google地图源,奈何用网上的教程,反代出来的都是带https协议的地址。 在 Vercel 上实现 HTTP 协议的反向代理需要注意以下技术细节(以 Google 地图 API 反代为例):1. **强制协议锁定方案**
在 `vercel.json` 配置中使用 headers 强制指定回源协议:
{
"routes": [
{
"src": "/maps/api/(.*)",
"dest": "http://maps.googleapis.com/maps/api/$1",
"headers": {
"X-Forwarded-Proto": "http",
"X-Proxy-Protocol": "HTTP/1.1"
}
}
]
}
2. **协议重写中间件**
通过 Edge Function 实现协议转换:
export default function middleware(request) {
const url = new URL(request.url);
if (url.pathname.startsWith('/maps/')) {
return new Response(null, {
headers: {
'x-rewrite-url': `http://maps.googleapis.com${url.pathname}${url.search}`,
'x-force-http': 'true'
}
});
}
}
3. **DNS 层干预**
在域名解析设置中添加 TXT 记录:
vercel-downgrade-protocol.http = force
4. **缓存策略覆盖**
添加特定缓存指令避免 HTTPS 缓存污染:
Cache-Control: no-protocol-transform, max-age=0
5. **混合内容处理方案**
在响应头中插入内容安全策略:
Content-Security-Policy: upgrade-insecure-requests; default-src http: 'unsafe-inline' 'unsafe-eval'
该方案通过多层级干预实现:
1. 使用 Vercel 的 Edge Network 修改原始请求元数据
2. 通过中间件动态重写目标协议
3. 利用 DNS 声明协议处理策略
4. 避免 CDN 层的自动协议升级
5. 解决浏览器端的混合内容拦截
需要注意:
- 需在 Vercel 项目设置中关闭 "Auto SSL"
- 建议配合使用 `stunnel` 做本地隧道代理
- 实际部署时需要处理 Google 地图 API 的签名验证
- 可能遇到地图服务的协议校验机制,建议同时设置 `Referrer-Policy: unsafe-url`
如果遇到 426 协议错误,可尝试在请求头添加:
Upgrade: HTTP/1.1
Connection: keep-alive, Upgrade
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]