Laravel与Vue分部署后请求报错求助:net::ERR_HTTP2_PROTOCOL_ERROR
解决方案:部署后Vue无法访问000webhost上的Laravel接口(ERR_HTTP2_PROTOCOL_ERROR)
1. 跨域(CORS)配置缺失
本地环境无跨域问题,但Netlify域名与000webhost Laravel域名属于不同源,必须配置CORS规则:
- 安装Laravel CORS扩展:
composer require barryvdh/laravel-cors - 修改
config/cors.php:- 将
paths设为['api/*'](覆盖所有API路由) allowed_origins指定Netlify站点域名(如['https://your-netlify-site.netlify.app']),测试阶段可临时设为['*']- 确保
allowed_methods包含GET, POST, PUT, DELETE等你用到的请求方法
- 将
- 在
app/Http/Kernel.php的api中间件组中添加\Barryvdh\Cors\HandleCors::class - 清理配置缓存:
php artisan config:cache,共享主机环境可手动删除bootstrap/cache目录下的缓存文件
2. 000webhost的HTTP2/SSL兼容性问题
ERR_HTTP2_PROTOCOL_ERROR多数与HTTPS配置相关:
- 确认000webhost站点已启用免费SSL证书(控制面板中找到SSL选项完成启用)
- Vue项目中所有接口地址必须使用
https://前缀,禁止混用http(避免混合内容错误) - 若HTTP2协议存在兼容性bug,可在
public/.htaccess中强制使用HTTP1.1:<IfModule mod_http2.c> Protocols http/1.1 </IfModule>
3. 路由重写配置失效
Laravel依赖URL重写解析API路由,需检查:
- 确保
public/.htaccess文件内容正确(默认Laravel重写规则如下):<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> - 联系000webhost客服确认
mod_rewrite模块已开启,或在控制面板中手动启用URL重写功能
4. 接口地址配置错误
- 检查Vue项目的生产环境变量(如
.env.production),确保API base URL指向000webhost的正确地址,例如:VUE_APP_API_URL=https://your-000webhost-domain.com/api - 代码中使用环境变量拼接接口地址,避免硬编码本地地址
5. 000webhost安全规则拦截
- 检查控制面板中的防火墙/ModSecurity设置,临时关闭ModSecurity测试是否能正常请求
- 查看Laravel的
storage/logs/laravel.log,若日志中无请求记录,说明请求被主机安全规则拦截,需联系客服调整规则
内容的提问来源于stack exchange,提问作者Abdallah
相关产品推荐
相关产品推荐

