6

我认为这个问题对某人来说很容易,对我来说将是一个面对面的情况。

我有一个 Laravel 5.3 站点,各种页面都有 ajax 请求。因为我使用了这个csrf_field()功能,所以它们工作得很好。

但是有一页ajax会产生这个错误:

Mixed Content: The page at 'https://example.com/fb/reports' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://example.com/fb/json?levelType=&id=&aggLevel=ad&start=&end='. This request has been blocked; the content must be served over HTTPS.

我的 javascript 看起来像这样:

    var relUrl = '/fb/json/';
    var payload = {
        levelType: levelType,
        id: id,
        aggLevel: aggLevel,
        start: start,
        end: end
    };
    console.log(relUrl);
    return $.ajax({
        type: 'GET',
        dataType: 'json',
        data: payload,
        url: relUrl,
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }            
    });

我已经阅读了大量有关此错误的文章。我尝试了很多建议的解决方案,包括将相对 URL 更改为完整的 https URL,或者以 2 个斜杠开头。

我什至尝试改变我的 Laravel 路由的工作方式,现在只使用查询字符串参数。

我已经研究了下面的所有文章(以及更多)。

此外,由于这个 ajax 查询位于站点的密码保护部分(并且有效的 ajax 查询位于站点公共/开放部分),我认为这可能与问题有关。但是后来我曾经SSH登录到生产服务器并vim暂时删除需要任何身份验证的行,并且仍然发生 https 错误。

我可以采取哪些步骤来进一步调试?我可以在我的 Cloudways 服务器上“跟踪”哪些日志?

Cloudflare 可能会干扰什么(我怀疑,因为其他 ajax 查询都在 https 上工作)?

谢谢!

4

2 回答 2

18

摘要: 我需要替换var relUrl = '/fb/json/';var relUrl = '/fb/json';(删除尾部斜杠),因为这是我的 Laravelweb.php路由文件所期望的。


在 Chrome 控制台中,我注意到httpsXHR 请求被“取消”并替换为http请求。

所以我曾经ssh登录到远程生产服务器并vim暂时禁用身份验证的要求。

然后在 Chrome 控制台中,我使用带有查询字符串参数的绝对 https URL 定义并运行了一个新的 ajax 命令。那行得通(没有混合内容错误)。然后我尝试了一个这样的相对 URL,它也起作用了。

即使是没有有效负载或查询字符串参数或尾部斜杠的相对 URL 也有效。

然后我再次添加了斜杠,它没有用。

我仍然希望有一种更简单的方法来跟踪或调试重定向路径或正在发生的任何事情。我仍然觉得我笨拙地(经过几个小时)偶然发现了答案,而不是知道如何可靠地剖析这个问题。

于 2017-01-31T03:38:29.693 回答
0

从 HTTP 更改为 HTTPS 时,可能会出现混合内容问题 - 内容必须作为 HTTPS 提供。

所以,首先,APP_URL.env文件中修改,如果我们使用 assets 助手,这应该不会给 URL 带来任何问题。

APP_URL=https://url.net

最后,将以下内容添加到**api.php**or的开头**web.php**

if (App::environment('production')) {
    URL::forceScheme('https');
}
于 2022-02-07T07:45:34.823 回答