Administrator
发布于 2026-01-19 / 1 阅读
0

OGame Vue TS 与 WebDAV 集成时的 CORS 问题解决方案

问题背景

最近在私有 NAS 系统上通过 Docker 部署了 OGame Vue TS——一款基于浏览器的太空策略游戏单机版。该游戏支持通过 WebDAV 协议实现云存档同步功能。为了管理游戏存档,我在同一台 NAS 上运行了 hacdias/webdav 容器作为 WebDAV 服务器。配置完成后,在 Zotero 等其他应用中连接 WebDAV 服务一切正常,但在 OGame 游戏界面测试连接时却遇到了错误提示:"网络错误,可能是 CORS 限制。建议使用支持 CORS 的 WebDAV 服务或通过代理访问。"

问题分析

CORS(跨域资源共享)是浏览器的安全机制,限制网页从一个域名发起的请求访问另一个域名的资源。虽然其他客户端应用(如 Zotero)不受此限制,但 OGame Vue TS 完全在浏览器中运行,因此浏览器会严格执行 CORS 策略。

检查 hacdias/webdav 的配置后发现,尽管已启用 CORS,但 allowed_hosts​ 配置不完整。浏览器实际访问 OGame 的地址未列入白名单,导致 Preflight 请求被拦截。

解决方案

核心问题在于 WebDAV 服务的 CORS 配置未包含浏览器访问游戏时使用的完整地址。以下是具体修复步骤:

1. 确定访问地址

首先确认你通过浏览器访问 OGame 的完整 URL,包括协议、IP/域名和端口。常见的形式如:

  • ​http://192.168.1.x:端口​(局域网 IP)

  • ​http://localhost:端口​(本地访问)

  • ​https://your-domain.com​(自定义域名)

2. 修改 WebDAV 配置

编辑 WebDAV 服务的 config.yml​ 文件,重点更新 cors​ 部分:

cors:
  enabled: true
  credentials: true

  # 关键:列出所有可能访问OGame的完整地址
  allowed_hosts:
    - http://localhost:8091
    - http://127.0.0.1:8091
    - http://192.168.1.100:8091  # 替换为你的实际NAS IP和端口
    - https://ogame.example.com  # 如有域名访问方式

  # 允许所有必要的请求头(使用通配符简化配置)
  allowed_headers:
    - "*"

  # 必须包含完整的WebDAV方法集
  allowed_methods:
    - GET
    - POST
    - OPTIONS
    - PUT
    - DELETE
    - PROPFIND     # WebDAV核心方法
    - PROPPATCH
    - MKCOL
    - COPY
    - MOVE
    - HEAD
    - LOCK
    - UNLOCK

  exposed_headers:
    - Content-Length
    - Content-Range
    - ETag
    - DAV

3. 重启服务

  • 停止 WebDAV Docker 容器

  • 保存配置文件

  • 重新启动容器

  • 清除浏览器缓存后测试连接

原理解析

为什么其他应用正常而浏览器端出错?

  • 非浏览器客户端(如 Zotero)直接发起 HTTP 请求,不受 CORS 限制

  • 浏览器环境会先发一个 OPTIONS​ 预检请求,检查目标服务器是否允许当前来源访问

  • 如果 allowed_hosts​ 不包含浏览器地址栏的完整来源,服务器返回的 CORS 头信息不匹配,浏览器就会阻止后续请求

为什么需要完整的 WebDAV 方法?

WebDAV 协议扩展了 HTTP,包含 PROPFIND​、LOCK​ 等特定方法。如果 allowed_methods​ 未声明这些方法,预检请求会失败,导致读写操作无法进行。

注意事项

  1. IP与端口的精确匹配:allowed_hosts​ 必须包含协议、IP/域名和端口,任一不匹配都会导致 CORS 失败

  2. 通配符的权衡:生产环境建议明确列出地址而非使用 *​ 通配符,但开发环境可简化配置

  3. 缓存问题:浏览器会缓存 CORS 策略,配置修改后务必清除缓存或使用无痕模式测试

替代方案简述

若无法修改 WebDAV 配置,也可通过 Nginx 反向代理将 OGame 和 WebDAV 部署在同一域名下,从根本上规避跨域问题。此方法配置稍复杂但更优雅,适合有代理服务环境的用户。

总结

浏览器端的 CORS 问题本质上是安全策略限制。通过完善 WebDAV 服务的 CORS 配置,明确授权游戏页面的访问来源,即可实现 OGame Vue TS 的存档云同步功能。关键在于确保 allowed_hosts​ 包含浏览器实际访问的完整地址,并正确配置 WebDAV 所需的 HTTP 方法。