混合内容(laravel)

时间:2017-10-30 15:16:52

标签: laravel-5

我收到以下错误(在每一页上)

app.js:703混合内容:“https://sitename.com/”页面是通过HTTPS加载的,但是请求了一个不安全的XMLHttpRequest端点“http://sitename.com/index.php/getMessages”。此内容也应通过HTTPS提供。

该网站是使用Laravel构建的。 有谁知道如何解决这个错误?

7 个答案:

答案 0 :(得分:1)

确保从XMLHttpRequest端点URL中删除尾部斜杠。

答案 1 :(得分:1)

几天前我遇到了同样的问题。您是否使用Cloudflare?将灵活的SSL更改为完全。

答案 2 :(得分:1)

就我而言,这是因为我不知道asset()函数不能自动处理https(如frankfurt-laravel's answer所指出)。

要解决此问题,由于我未在开发人员中使用SSL,因此我在.env中将ASSET_URL设置为https url:

APP_URL=https://example.com
ASSET_URL="${APP_URL}"

这将覆盖asset()函数以使用https url,而无需完全修改该函数。有关更多上下文,请参见the docs

答案 3 :(得分:0)

在您的.env文件中将您的网址设置为https APP_URL=https://sitename.com,并在您的config / app.php中将网址设置为'url' => env('APP_URL', 'APP_URL=https://sitename.com'),以解决您的问题

答案 4 :(得分:0)

您打开了页面' https://sitename.com/' 。但是这个页面的javascript发送了一个http请求,而不是https。

您应该更改您的javascript代码以发送https请求。

发送https请求的方法有两种:

  1. 将协议与路径放在一起。

    $得到(' http://sitename.com/index.php/getMessages&#39)

  2. 忽略协议,但将' //'在路径之前

    $得到(' // sitename.com/index.php/getMessages')

答案 5 :(得分:0)

我建议使用方法参数$secure Laravel(肯定有5.6)提供:

例如,当您使用资产加载时,

 <!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">

如果您具有某种高级IDE,则可以查找asset()的定义。如果没有,请检查此文件helpers.php

但是,文档说

/**
 * Generate an asset path for the application.
 *
 * @param  string  $path
 * @param  bool    $secure
 * @return string
 */

因此,您只需要传递true作为第二个参数,然后以安全的方式加载资源。对于上述示例,

<!-- Scripts -->
<script src="{{ asset('js/app.js',true) }}" defer></script>
<!-- Styles -->
<link href="{{ asset('css/app.css', true) }}" rel="stylesheet">

请注意,如果您使用php artisan serve,这将导致冲突,因为技术人员无法通过HTTPS协议提供服务。因此,您需要HTTPS设置,例如在MacOS上使用Valet或在Windows上使用Homestead。请点击链接以获取设置详细信息。

希望这会有所帮助,请让我知道它是否有效。

答案 6 :(得分:0)

我使用的是 Laravel 8 和 Livewire 2。我在 Digital Ocean 上创建了应用程序并解决了这些问题,我必须这样做:

<!-- Tailwind CSS -->
<link href="{{ secure_asset('css/app.css') }}" rel="stylesheet">
    
<!-- Alpine -->
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" defer></script>

<!-- Scripts -->
<script src="{{ secure_asset('js/app.js') }}" defer></script>
@livewireStyles

我不得不改用secure_asset。这是 Laravel 文档中的内容。

我还必须像这样更改 secure_url 的所有“路由”引用:

<form method="POST" action="{{ route('logout') }}">
<form method="POST" action="{{ secure_url('/logout') }}">

希望这会有所帮助。