在 NAS 上跑了个 OGame Vue TS(浏览器版的太空策略游戏),想用 WebDAV 做云存档。WebDAV 服务配好了,Zotero 连上去正常——但 OGame 的浏览器界面一直报「网络错误,可能是 CORS 限制」。
为什么 Zotero 能行、OGame 不行
Zotero 是原生应用,不受浏览器的同源策略限制。OGame Vue TS 完全跑在浏览器里,浏览器严格执行 CORS 策略——从 http://192.168.x.x:游戏端口 发请求到 http://192.168.x.x:WebDAV端口,端口不同就是跨域,浏览器会发 Preflight 请求(OPTIONS),如果 WebDAV 服务没正确响应就拒绝。
修法
我用的是 hacdias/webdav 镜像。它的 CORS 配置通过环境变量控制。关键是 allowed_hosts 必须包含浏览器访问 OGame 的完整地址,不是 WebDAV 自己的地址。
我踩的坑就是这里——把 WebDAV 的地址写进去了,应该是 OGame 的地址。
hacdias/webdav 的 CORS 参数:
-cors.enabled=true
-cors.allowed_hosts=http://你的OGame访问地址:端口
-cors.allowed_methods=GET,POST,PUT,DELETE,OPTIONS,PROPFIND,MKCOL,MOVE,COPY
WebDAV 本身也需要 OPTIONS 和 PROPFIND 这些方法,不全加的话 Preflight 过了但实际请求还是会被拦。
改完重启容器,OGame 里重新测试连接——通了。
如果还不行
浏览器 F12 看 Network 面板,找红色的 OPTIONS 请求,看 Response Headers 里有没有 Access-Control-Allow-Origin。没有或者值不对,说明 CORS 配置还没生效。
另外如果你用的是 Nginx/Caddy 反代,CORS 的 Access-Control-Allow-Origin 可以被反代层注入,不一定要在 WebDAV 容器里配——但反代层要注意 OPTIONS 请求的转发,有些默认不处理。