调整宽松跨源资源策略解决000webhost接口返回HTML问题
部署000webhost后GraphQL接口返回HTML而非JSON的排查方案
针对你基于PHP/React/GraphQL的全栈应用在000webhost部署后,接口返回200但响应为HTML的问题,按以下步骤排查:
确认接口URL是否指向正确的PHP入口
000webhost默认会给新站点生成欢迎页(如index.html),如果你的GraphQL请求URL没有精准指向入口文件(比如graphql.php),服务器会直接返回默认HTML页面。检查前端请求的接口路径是否和后端部署的文件路径匹配,比如确保请求your-domain.com/api/graphql时,服务器能正确映射到你的GraphQL处理文件。排查PHP错误被封装为HTML返回
000webhost的默认配置会把PHP错误转换成美化后的HTML页面返回(状态码仍为200)。可以在GraphQL入口文件顶部添加以下代码,强制输出错误信息并指定JSON响应头:
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); header('Content-Type: application/json');
重新请求接口后,查看返回的HTML源码,里面通常会包含PHP的具体错误(比如依赖缺失、文件路径错误、权限不足等)。
- 检查Apache的.htaccess重写规则
如果使用Apache服务器,错误的.htaccess规则会导致请求无法转发到GraphQL入口。确保你的.htaccess包含正确的重写配置,比如:
RewriteEngine On # 排除静态文件 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 把/api/graphql请求转发到graphql.php RewriteRule ^api/graphql$ graphql.php [L]
同时确认000webhost允许自定义.htaccess(免费套餐可能有部分限制)。
- 验证CORS配置是否异常
跨域请求时,如果CORS头配置错误,服务器可能把OPTIONS预请求的错误返回成HTML。在PHP入口文件中添加CORS处理逻辑:
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Methods: POST, GET, OPTIONS"); header("Access-Control-Allow-Headers: Content-Type"); // 处理OPTIONS预请求 if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit(0); }
- 确认GraphQL服务初始化是否成功
检查PHP版本是否满足依赖要求(比如webonyx/graphql-php需要PHP 7.4+),同时确认Composer依赖是否已正确部署到000webhost(部分FTP上传可能遗漏vendor目录)。如果依赖缺失或版本不兼容,代码执行会失败,触发服务器默认的错误HTML页面。
附错误截图:
内容的提问来源于stack exchange,提问作者erjus
相关产品推荐
相关产品推荐

