【问题标题】:Where to enable Https with Laravel Mix在哪里使用 Laravel Mix 启用 Https
【发布时间】:2018-01-02 12:35:06
【问题描述】:

为什么混合功能没有像资产功能那样的安全选项?现在我只是复制了帮助程序并编写了我自己的 mix_secure 函数,但我很惊讶没有其他人偶然发现它?可悲的是资产功能没有缓存破坏......

有什么想法/想法吗?

干杯,

罗宾

【问题讨论】:

  • 为什么不使用版本控制来破坏缓存?

标签: laravel https laravel-mix


【解决方案1】:

为什么混合功能没有像资产功能那样的安全选项?

因为mix() 只返回URI 而不是URL

因此,如果在刀片模板中单独使用

<script src="{{ mix('js/app.js') }}"></script>

它将呈现为

<script src="/js/app.js?id=c5ac0d032c3d7fe2f10e"></script>

并且浏览器将选择任何方案(HTTP 或 HTTPS)和提供服务的域名。我想不出你想用不同的方案为资产服务的情况。更何况现在你想通过 HTTPS 提供一切服务。

现在,如果您想构建资产的完整 URL,则有两个内置函数 asset()secure_asset() 完全符合其名称的含义:

>>> 资产(混合('js/app.js')) => "http://domain.dev/js/app.js?id=c5ac0d032c3d7fe2f10e" >>> 安全资产(混合('js/app.js')) => "https://domain.dev/js/app.js?id=c5ac0d032c3d7fe2f10e"

遗憾的是,资产功能没有缓存破坏...

你又看错了。 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

延伸阅读Versioning / Cache Busting

【讨论】:

  • 感谢您的回复。有趣的是,mix 确实为我返回了一个完整的 URL,而不仅仅是 URI(这确实可以解决问题)。如果我查看混合函数的 Laravel 源代码,它的最后一行实际上调用了资产函数 return new HtmlString(asset($manifestDirectory.$manifest[$path]));。这就是为什么我构建了一个mix_secure,它是混合函数的副本,但最后一行带有资产函数return new HtmlString(asset($manifestDirectory.$manifest[$path], true)); 的安全标志。这个解决方案对我有用,但我很惊讶它不是内置的!?
猜你喜欢
  • 1970-01-01
  • 2021-06-29
  • 2023-01-02
  • 2021-03-21
  • 2021-02-23
  • 2016-10-01
  • 1970-01-01
  • 2011-09-26
  • 2018-08-09
相关资源
最近更新 更多