laravel5.4已经增加头部跨域中间件的情况下,页面仍然无法收到响应结果
1. 运行环境
1). 当前使用的 Laravel 版本?
Laravel Framework 5.4.36
2). 当前使用的 php/php-fpm 版本?
PHP 版本:PHP 5.6.40 (cli) (built: Oct 27 2022 14:45:49)
php-fpm 版本:
3). 当前系统
CentOS 8.4
4). 业务环境
开发环境
5). 相关软件版本
2. 问题描述?
项目是前后端分离,laravel只提供接口数据。
部署时使用lnmp集成安装包,在A服务器上使用的是v1.7,B服务器上使用的是v1.9。
两个服务器的php、mysql、apache均使用相同的版本。
项目部署在一个服务器A上,可以正常运行。现在将A服务器的代码完全复制到B服务器上,并设置好vhost后,访问页面出现问题。
A服务器上,页面可以正常发送跨域ajax请求,并返回正确数据
B服务器上,则无法正常获取数据,没有响应
Chrome浏览器控制台会输出
POST 接口地址 net::ERR_EMPTY_RESPONSE
后端为防止跨域问题出现,已经增加中间件处理
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Log;
class Cors
{
public function handle($request, Closure $next) {
$IlluminateResponse = 'Illuminate\Http\Response';
$SymfonyResponse = 'Symfony\Component\HttpFoundation\Response';
$response = $next($request);
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, PATCH, DELETE',
'Access-Control-Allow-Headers' => 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization , Access-Control-Request-Headers, X-CSRF-TOKEN'
];
if ($response instanceof $IlluminateResponse) {
foreach ($headers as $key => $value) {
$response->header($key, $value);
}
}
if ($response instanceof $SymfonyResponse) {
foreach ($headers as $key => $value) {
$response->headers->set($key, $value);
}
}
// 日志记录
return $response;
}
}
通过后台的mysql的监听日志可以看到,数据库完成了所有的业务查询。
在上述引用代码中,“日志记录”位置使用Log::info($response)
记录变量数据,也能获取完整数据(包含中间件设置的头部,及相关业务数据)。
apache的vhost中也尝试增加了Header set Access-Control-Allow-Origin *
,依然没有效果
防火墙firewall已经添加80端口。
希望能找到此问题的原因~~
推荐文章: