已配置所需请求头的本地文件CORS请求被阻,游戏调用proxy.php无响应
问题排查与解决方案
一、请求未到达服务器(日志无记录的核心原因)
直接访问有日志但游戏调用无日志,说明请求根本没发送到proxy.php,或被服务商拦截:
- freehosting.com的跨站/恶意请求拦截:免费主机通常会拦截非浏览器直接发起的请求(比如游戏客户端的请求)。可在游戏请求头中添加模拟浏览器的
User-Agent:// 游戏端请求示例(JS) fetch('https://www.domain.com/proxy.php', { method: 'POST', headers: { 'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' }, body: JSON.stringify({prompt: "test"}) }) - 游戏端请求路径错误:检查游戏内请求URL是否拼写正确(如漏写https、域名错误),本地测试时浏览器CORS策略可能直接阻止请求发送,导致日志无记录。
- OPTIONS预请求被服务器前置拦截:免费主机可能通过.htaccess或服务器配置在PHP脚本执行前拦截OPTIONS请求,导致预请求失败、浏览器终止后续POST请求。可在根目录创建
.htaccess添加全局CORS配置:Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS" Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With" RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=204,L]
二、CORS头配置的潜在问题
- 头重复设置:OPTIONS分支重复设置
Access-Control-Allow-Origin: *虽无影响,但建议统一在脚本顶部设置,避免后续输出导致头发送失败(直接访问有日志说明此情况暂不存在)。 - 缺失凭证允许头:若游戏请求带
withCredentials: true,需添加header("Access-Control-Allow-Credentials: true");,同时Access-Control-Allow-Origin不能用*,需指定游戏具体域名。
三、免费主机的其他限制
- curl功能限制:虽直接访问能执行curl,但游戏端请求可能因来源或频率被主机禁用curl。可在脚本中添加
var_dump(function_exists('curl_init'));确认可用性。 - 请求大小限制:若游戏发送的请求体过大,免费主机可能直接拦截,导致日志无记录。建议先发送最小请求体测试。
四、游戏端调试建议
- 查看浏览器网络面板:网页游戏可打开F12的Network面板,查看请求状态码(如403、404)及响应错误信息,明确拦截原因。
- 抓包工具分析:用Charles或Fiddler抓取游戏端请求,确认请求是否发送、请求头/体是否正确。
内容的提问来源于stack exchange,提问作者alexgilseg
相关产品推荐
相关产品推荐

