混合内容 jQuery ajax HTTPS 请求已在 Laravel 上被阻止
Mixed content jQuery ajax HTTPS request has been blocked on Laravel
我认为这个问题对某些人来说很容易,对我来说将是一个面子问题。
我有一个 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 查询位于站点的密码保护部分(而 work 的 ajax 查询位于public/open 网站的一部分),我认为这可能与问题有关。但是后来我使用 SSH
登录生产服务器并使用 vim
暂时删除需要任何身份验证的行,并且 https 错误 still 发生了。
从这里我可以采取哪些步骤来进一步调试?我可以在我的 Cloudways 服务器上 'tail' 哪些日志?
是否有任何 Cloudflare 可能会干扰的内容(我对此表示怀疑,因为其他 ajax 查询都在 https 上工作)?
谢谢!
总结:
我需要将 var relUrl = '/fb/json/';
替换为 var relUrl = '/fb/json';
(删除尾部斜杠),因为这是我的 Laravel web.php
路由文件所期望的。
在 Chrome 控制台中,我注意到 https
XHR 请求被 "canceled" 替换为 http
请求。
然后我使用 ssh
登录到远程生产服务器并 vim
暂时禁用身份验证要求。
然后在 Chrome 控制台中,我使用绝对 https URL 定义并 运行 一个新的 ajax 命令,末尾带有查询字符串参数。那行得通(没有混合内容错误)。然后我尝试了一个亲戚 URL 这样的,它也有效。
即使是没有负载或查询字符串参数或尾部斜线的亲戚 URL 也能工作。
然后我又加了尾斜线,还是不行。
我仍然希望有一种更简单的方法来跟踪或调试重定向路径或发生的任何事情。我仍然觉得我笨拙地(在几个小时后)找到了答案,而不是知道如何可靠地剖析这个问题。
从 HTTP 更改为 HTTPS 时,可能会出现混合内容问题 - 内容必须作为 HTTPS 提供。
所以,首先,修改.env
文件中的APP_URL
,如果我们使用assets helper,这应该不会给URL带来任何问题。
APP_URL=https://url.net
最后,将以下内容添加到 **api.php**
或 **web.php**
的开头:
if (App::environment('production')) {
URL::forceScheme('https');
}
我认为这个问题对某些人来说很容易,对我来说将是一个面子问题。
我有一个 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 查询位于站点的密码保护部分(而 work 的 ajax 查询位于public/open 网站的一部分),我认为这可能与问题有关。但是后来我使用 SSH
登录生产服务器并使用 vim
暂时删除需要任何身份验证的行,并且 https 错误 still 发生了。
从这里我可以采取哪些步骤来进一步调试?我可以在我的 Cloudways 服务器上 'tail' 哪些日志?
是否有任何 Cloudflare 可能会干扰的内容(我对此表示怀疑,因为其他 ajax 查询都在 https 上工作)?
谢谢!
总结:
我需要将 var relUrl = '/fb/json/';
替换为 var relUrl = '/fb/json';
(删除尾部斜杠),因为这是我的 Laravel web.php
路由文件所期望的。
在 Chrome 控制台中,我注意到 https
XHR 请求被 "canceled" 替换为 http
请求。
然后我使用 ssh
登录到远程生产服务器并 vim
暂时禁用身份验证要求。
然后在 Chrome 控制台中,我使用绝对 https URL 定义并 运行 一个新的 ajax 命令,末尾带有查询字符串参数。那行得通(没有混合内容错误)。然后我尝试了一个亲戚 URL 这样的,它也有效。
即使是没有负载或查询字符串参数或尾部斜线的亲戚 URL 也能工作。
然后我又加了尾斜线,还是不行。
我仍然希望有一种更简单的方法来跟踪或调试重定向路径或发生的任何事情。我仍然觉得我笨拙地(在几个小时后)找到了答案,而不是知道如何可靠地剖析这个问题。
从 HTTP 更改为 HTTPS 时,可能会出现混合内容问题 - 内容必须作为 HTTPS 提供。
所以,首先,修改.env
文件中的APP_URL
,如果我们使用assets helper,这应该不会给URL带来任何问题。
APP_URL=https://url.net
最后,将以下内容添加到 **api.php**
或 **web.php**
的开头:
if (App::environment('production')) {
URL::forceScheme('https');
}