在 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 加载内容的主要内容,如果未能解决你的问题,请参考以下文章