本地环境无需配置HTTPS使用asset(mix())加载静态资源的解决方案
静态资源加载ERR_CONNECTION_REFUSED问题解决方案
问题根因:Laravel的
asset()函数第二个参数$secure设为true时,会强制生成HTTPS协议的资源URL,与本地localhost使用的HTTP协议不匹配,导致资源请求被拒绝。
以下都是无需为localhost配置HTTPS的低成本解决方案:
- 方案1:直接移除
asset()的第二个true参数(成本最低)asset()默认会自动匹配当前站点的访问协议,本地HTTP访问时生成HTTP资源链接,线上HTTPS环境自动生成HTTPS链接,无需额外适配。修改后的代码示例:
<!-- Scripts --> <script src="{{ asset(mix('/js/index.js')) }}" defer></script> <!-- Styles --> <link href="{{ asset(mix('/css/app.css')) }}" rel="stylesheet"> <link href="{{ asset(mix('/css/fonts.css')) }}" rel="stylesheet"> <link href="{{ asset(mix('/css/container.css')) }}" rel="stylesheet">
- 方案2:保留线上强制HTTPS逻辑,做环境适配
如果加true参数是为了线上环境强制走HTTPS,可以通过环境判断动态传参,仅生产环境开启强制HTTPS:
<script src="{{ asset(mix('/js/index.js'), app()->environment('production')) }}" defer></script>
本地开发环境会自动使用当前访问协议,不影响线上配置。
- 方案3:适配本地环境配置
修改项目根目录.env文件中的APP_URL参数为http://localhost,同时移除asset()的第二个true参数,框架会自动读取APP_URL的协议生成对应资源链接。
内容的提问来源于stack exchange,提问作者Phạm Huy Phát
相关产品推荐
相关产品推荐

