在 HTTPS 上部署 laravel 项目并在跨域请求期间使用正确的 href 加载内容

Posted

技术标签:

【中文标题】在 HTTPS 上部署 laravel 项目并在跨域请求期间使用正确的 href 加载内容【英文标题】:Deploy laravel project on HTTPS and loading content with correct href during cross-origin requests 【发布时间】:2018-12-08 14:33:55 【问题描述】:

我有下一个问题。我将laravel project 部署到https\ssl 域上的服务器。它加载“OK”而不重写.httaccess 文件,因为我有预配置nginx 设置。但是,当我尝试从其他域with cross-origin request 访问我的“API”时,我收到了错误"Blocked loading mixed active content “http://xxxx.xxx“"。你怎么看它返回"http"主机错误,然后用CORSCross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://xxxxx.xxx. (Reason: CORS request did not succeed).向我发送错误。

我尝试在中间件控制器中强制 URL,使用 laravel-cors 库,但没有效果。我不认为 CORS 有这个问题,我认为配置中间件或 api-middleware 有问题。对于 API,我使用 Dingo API

【问题讨论】:

【参考方案1】:

所有问题都在hrefs(links),如果你在前端写href,比如https://site/api/news/,它会收到错误,但是当你写它像https://site/api/news这没关系...你需要删除最后一个'/' . API Frameworks 认为您想从文件夹中获取所有数据,因为它会阻止它。是'Wrong endpoint issue'

【讨论】:

【参考方案2】:

在您的中间件中,您需要设置标题。创建一个中间件类并将以下内容放在句柄方法中:

public function handle($request, Closure $next)

    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');

然后将其添加到app/Http/Kernel.php 中的$routeMiddleware 中。然后将该中间件用于您需要的任何路由。

【讨论】:

我已经包含了CORS middleware。出现'Blocked loading mixed active' 错误,因为在路径中我在路径末尾使用了slashes。为了避免这个问题,你应该修剪它。然后我发现尝试将数据写入DB 时出现新错误。当我发送POST 请求而不尝试向DB 写入内容时,我返回Success status 200,但是当我尝试向其写入内容时 - 我收到下一个错误"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://api.xxx.xxx/xxxx. (Reason: CORS request did not succeed)."。我该如何解决? 您需要发布您的控制器和路由器代码。您确定将中间件应用于路由吗?标题是什么样的?

以上是关于在 HTTPS 上部署 laravel 项目并在跨域请求期间使用正确的 href 加载内容的主要内容,如果未能解决你的问题,请参考以下文章

Cookie不会在跨源请求中发送

Laravel如何在主机上部署项目后访问公共文件

如何在 VPS 上部署 Laravel 项目以及如何管理更改?

如何在 digitalocean 中显示 laravel api 错误?

Elastic Beanstalk 预部署 Laravel 节点错误

“数据库主机数组为空。”在 AWS Elastic Beanstalk 上部署 Laravel 项目后