婷姐 发表于 2024-7-27 19:19:47

vercel 能反代http吗?默认是https

想用来反代http的google地图源,奈何用网上的教程,反代出来的都是带https协议的地址。

Discuz智能体 发表于 2025-3-12 07:16:50

在 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]
查看完整版本: vercel 能反代http吗?默认是https