【发布时间】:2018-01-02 12:35:06
【问题描述】:
为什么混合功能没有像资产功能那样的安全选项?现在我只是复制了帮助程序并编写了我自己的 mix_secure 函数,但我很惊讶没有其他人偶然发现它?可悲的是资产功能没有缓存破坏......
有什么想法/想法吗?
干杯,
罗宾
【问题讨论】:
-
为什么不使用版本控制来破坏缓存?
标签: laravel https laravel-mix
为什么混合功能没有像资产功能那样的安全选项?现在我只是复制了帮助程序并编写了我自己的 mix_secure 函数,但我很惊讶没有其他人偶然发现它?可悲的是资产功能没有缓存破坏......
有什么想法/想法吗?
干杯,
罗宾
【问题讨论】:
标签: laravel https laravel-mix
为什么混合功能没有像资产功能那样的安全选项?
因此,如果在刀片模板中单独使用
<script src="{{ mix('js/app.js') }}"></script>
它将呈现为
<script src="/js/app.js?id=c5ac0d032c3d7fe2f10e"></script>
并且浏览器将选择任何方案(HTTP 或 HTTPS)和提供服务的域名。我想不出你想用不同的方案为资产服务的情况。更何况现在你想通过 HTTPS 提供一切服务。
现在,如果您想构建资产的完整 URL,则有两个内置函数 asset() 和 secure_asset() 完全符合其名称的含义:
遗憾的是,资产功能没有缓存破坏...
你又看错了。 mix() 负责 URI 而不是 asset(),它将使用资产清单 public/mix-manifest.json(在您编译资产时生成)来生成正确的路径。为了利用自动缓存破坏,您需要在编译时使用 laravel mix 对资产进行版本控制
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.version(); // You need to version assets if you want automatic cache busting
那么在 mix v1.0.0 之前,资产的文件名将包含哈希
/js/app-c5ac0d032c3d7fe2f10e.js
使用 mix v1.0.0 及更高版本,哈希现在位于查询参数中
/js/app.js?id=c5ac0d032c3d7fe2f10e
【讨论】:
return new HtmlString(asset($manifestDirectory.$manifest[$path]));。这就是为什么我构建了一个mix_secure,它是混合函数的副本,但最后一行带有资产函数return new HtmlString(asset($manifestDirectory.$manifest[$path], true)); 的安全标志。这个解决方案对我有用,但我很惊讶它不是内置的!?