Unity WebGL构建时请求遭CORS拦截问题求助
解决Unity WebGL版本CORS请求拦截问题
核心逻辑说明
桌面版和禁用CORS的浏览器能正常运行,是因为桌面客户端不受浏览器同源策略限制,禁用CORS则直接绕过了浏览器的安全校验。浏览器的CORS机制本身是强制安全规则,但确实存在无需修改服务器的解决思路:
方案1:调整UnityWebRequest请求配置
如果游戏使用UnityWebRequest发起请求,可针对WebGL平台调整参数:
- 若仅需触发请求、无需读取响应内容,可按报错提示设置请求模式为
no-cors:
using UnityEngine.Networking; IEnumerator SendLaunchRequest() { UnityWebRequest request = UnityWebRequest.Get("https://myhost/launch"); #if UNITY_WEBGL && !UNITY_EDITOR request.SetRequestHeader("Access-Control-Request-Method", "GET"); request.useHttpContinue = false; // 启用no-cors模式,注意:此模式下无法读取响应内容 request.SetRequestHeader("mode", "no-cors"); #endif yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.Log(request.error); } }
- 若需要读取响应内容,此方案不适用,需采用下方代理方案。
方案2:本地反向代理(调试/预发布测试)
用本地代理工具(如Nginx、Caddy)将localhost请求转发到远程服务器,让浏览器判定请求为同源:
- 下载Nginx后,修改
nginx.conf配置:
server { listen 8080; server_name localhost; location /launch { proxy_pass https://myhost/launch; proxy_set_header Host myhost; proxy_set_header X-Real-IP $remote_addr; } }
- 启动Nginx,将Unity中的请求地址改为
http://localhost:8080/launch,此时浏览器不会触发CORS拦截。
方案3:Unity WebGL导出配置调整
在Unity编辑器中修改WebGL相关设置:
- 打开
Edit > Project Settings > Player > WebGL - 在
Publishing Settings中勾选Enable Cross-Origin Resource Sharing (CORS) - 将
Allow Downloads设置为All
补充提示
如果是正式发布WebGL版本,服务器端配置CORS是最标准、最稳定的方案(添加Access-Control-Allow-Origin响应头)。上述方案主要用于调试或临时场景。
内容的提问来源于stack exchange,提问作者draqula
相关产品推荐
相关产品推荐

