Laravel 9中AJAX未采用HTTPS的技术问题求助
解决Laravel 9中AJAX请求使用HTTP而非HTTPS的问题
问题背景
站点通过HTTPS访问,但Laravel生成的AJAX请求URL为HTTP,使用Cloudflare作为反向代理服务。
解决方案
1. 让Laravel正确识别Cloudflare的HTTPS请求
Laravel默认可能无法识别Cloudflare转发的HTTPS请求,需要配置信任代理:
编辑app/Http/Middleware/TrustProxies.php文件:
<?php namespace App\Http\Middleware; use Illuminate\Http\Request; use Fideloper\Proxy\TrustProxies as Middleware; class TrustProxies extends Middleware { // 生产环境建议替换为Cloudflare官方公布的IP段,避免信任所有代理 protected $proxies = ['*']; protected $headers = Request::HEADER_X_FORWARDED_ALL; }
Cloudflare会通过X-Forwarded-Proto头告知后端实际请求协议是HTTPS,配置后Laravel就能正确识别并生成HTTPS URL。
2. 强制Laravel生成HTTPS URL
方法一:配置环境变量
在项目根目录的.env文件中设置:
APP_URL=https://www.com
执行命令清除配置缓存:
php artisan config:clear
方法二:路由生成时指定HTTPS
修改Blade模板中的路由生成代码,强制使用HTTPS协议:
url: '{{ Route('research_filelist', ['doc_id' => $laboratory_documents->id, 'scheme' => 'https']) }}',
方法三:全局强制HTTPS
在app/Providers/AppServiceProvider.php的boot方法中添加代码,全局强制所有URL使用HTTPS:
public function boot() { \URL::forceScheme('https'); }
3. 检查Cloudflare SSL配置
登录Cloudflare控制台,确保SSL/TLS模式设置为严格或灵活(推荐严格模式,需后端服务器已配置有效的SSL证书),确保Cloudflare正确转发HTTPS请求及相关头信息。
内容的提问来源于stack exchange,提问作者박종혁
相关产品推荐
相关产品推荐

