免费主机上REST API无法PUTDELETE?如何有效解决?
- 内容介绍
- 文章标签
- 相关推荐
本文共计967个文字,预计阅读时间需要4分钟。
000webhost等免费web托管服务默认禁止使用PUT、DELETE等非标准HTTP方法,仅允许GET和POST;本地运行正常但线上后报错‘err_http2_protocol_error’或‘socket hang up’,本质是服务商主动拦截而非代码错误。
在开发基于 CodeIgniter 4(或其他 PHP 框架)的 REST API 时,本地环境(如 XAMPP、Laravel Valet 或内置 PHP 服务器)通常完整支持所有 HTTP 方法(GET、POST、PUT、DELETE、PATCH)。但一旦部署到 000webhost 免费版,你会发现 DELETE 和 PUT 请求始终失败——前端报 Network Error、ERR_HTTP2_PROTOCOL_ERROR,Postman 显示 Socket hang up,而服务端甚至无日志可查。这不是你的控制器或模型有误(你提供的 delete() 方法逻辑合理,BarangModel 配置也无异常),而是底层 Web 服务器(如 Nginx/Apache)在免费套餐中直接拒绝处理这些方法。
? 根本原因:免费主机的 HTTP 方法限制
000webhost 明确声明其免费计划仅支持 GET 和 POST 方法。其他方法(PUT、DELETE、PATCH、HEAD 等)会被服务器在协议层直接终止连接,不转发至 PHP 应用,因此不会触发任何 PHP 错误、不写入 error_log,也不返回 HTTP 状态码——这正是 Socket hang up 和 net::ERR_HTTP2_PROTOCOL_ERROR 的典型表现。
本文共计967个文字,预计阅读时间需要4分钟。
000webhost等免费web托管服务默认禁止使用PUT、DELETE等非标准HTTP方法,仅允许GET和POST;本地运行正常但线上后报错‘err_http2_protocol_error’或‘socket hang up’,本质是服务商主动拦截而非代码错误。
在开发基于 CodeIgniter 4(或其他 PHP 框架)的 REST API 时,本地环境(如 XAMPP、Laravel Valet 或内置 PHP 服务器)通常完整支持所有 HTTP 方法(GET、POST、PUT、DELETE、PATCH)。但一旦部署到 000webhost 免费版,你会发现 DELETE 和 PUT 请求始终失败——前端报 Network Error、ERR_HTTP2_PROTOCOL_ERROR,Postman 显示 Socket hang up,而服务端甚至无日志可查。这不是你的控制器或模型有误(你提供的 delete() 方法逻辑合理,BarangModel 配置也无异常),而是底层 Web 服务器(如 Nginx/Apache)在免费套餐中直接拒绝处理这些方法。
? 根本原因:免费主机的 HTTP 方法限制
000webhost 明确声明其免费计划仅支持 GET 和 POST 方法。其他方法(PUT、DELETE、PATCH、HEAD 等)会被服务器在协议层直接终止连接,不转发至 PHP 应用,因此不会触发任何 PHP 错误、不写入 error_log,也不返回 HTTP 状态码——这正是 Socket hang up 和 net::ERR_HTTP2_PROTOCOL_ERROR 的典型表现。

