前言

众所周知我们大家在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口(也可能是其他人的机器) , 例如 localhost:8000 , 而 laravel 程序又运行在另一个端口,这样就跨域了,而由于浏览器的同源策略,跨域请求是非法的。其实这个问题很好解决,只需要添加一个中间件就可以了。下面话不多说了,来随着小编一起看看详细的解决方案吧。

解决方案:

1、新建一个中间件

php artisan make:middleware EnableCrossRequestMiddleware

2、书写中间件内容

namespace App\Http\Middleware;

use Closure;

class EnableCrossRequestMiddleware

{

/**

* Handle an incoming request.

*

* @param \Illuminate\Http\Request $request

* @param \Closure $next

* @return mixed

*/

public function handle($request, Closure $next)

{

$response = $next($request);

$origin = $request->server('HTTP_ORIGIN') ? $request->server('HTTP_ORIGIN') : '';

$allow_origin = [

'http://localhost:8000',

];

if (in_array($origin, $allow_origin)) {

$response->header('Access-Control-Allow-Origin', $origin);

$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');

$response->header('Access-Control-Expose-Headers', 'Authorization, authenticated');

$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');

$response->header('Access-Control-Allow-Credentials', 'true');

}

return $response;

}

}

$allow_origin 数组变量就是你允许跨域的列表了,可自行修改。

3、然后在内核文件注册该中间件

protected $middleware = [

// more

App\Http\Middleware\EnableCrossRequestMiddleware::class,

];

在 App\Http\Kernel 类的 $middleware 属性添加,这里注册的中间件属于全局中间件。

然后你就会发现前端页面已经可以发送跨域请求了。

会多出一次 method 为 options 的请求是正常的,因为浏览器要先判断该服务器是否允许该跨域请求。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

laravel php跨域请求,laravel开发中跨域的解决方案相关推荐

  1. Ajax跨域请求,无法传递及接收cookie信息解决方案

    Ajax跨域请求,无法传递及接收cookie信息解决方案 参考文章: (1)Ajax跨域请求,无法传递及接收cookie信息解决方案 (2)https://www.cnblogs.com/yalong ...

  2. python web开发中跨域问题的解决思路

    python web开发中跨域问题的解决思路 参考文章: (1)python web开发中跨域问题的解决思路 (2)https://www.cnblogs.com/mqhpy/p/11445071.h ...

  3. laravel php跨域请求,Laravel 5.x设置跨域访问

    做api接口的时候碰到个问题,跨域! 解决方法有很多,但是方便的依旧那么一两个,这里我就介绍我最会的就是以下这种 最方便的,新建一个middleWare,把这个middleware加入到全局中间件,所 ...

  4. Cors跨域(一):深入理解跨域请求概念及其根因

    Talk is cheap. Show me the money. 前言 你好,我是YourBatman. 做Web开发的小伙伴对"跨域"定并不陌生,像狗皮膏药一样粘着几乎每位同学 ...

  5. Ajax----跨域请求

    跨域请求:两个不同域名之间的通讯. Ajax受到浏览器的限制(安全性考虑)不允许跨域通信. <script> var req=new XMLHttpRequest(); req.open( ...

  6. node代理请求 vue_vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址...

    使用 Vue-cli 创建的项目,开发地址是 localhost:8080,需要访问非本机上的接口http://10.1.0.34:8000/queryRole.不同域名之间的访问,需要跨域才能正确请 ...

  7. 利用Nginx轻松实现Ajax的跨域请求(前后端分离开发调试必备神技)

    利用Nginx轻松实现浏览器中Ajax的跨域请求(前后端分离开发调试必备神技) 前言 为什么会出现跨域? 造成跨域问题的原因是因为浏览器受到同源策略的限制,也就是说js只能访问和操作自己域下的资源,不 ...

  8. 用springmvc 开发为 app 提供后台服务遇到跨域请求的问题

    浏览器使用的chrome,安装了cors插件(开启允许跨域请求) 然后访问远程服务器提供的服务的时候,浏览器console 输出如下形式的错误信息: 问题1.OPTION: xxxxxx url地址 ...

  9. php 跨域 验证_php 前后端分离开发进行跨域请求时ajax发送验证参数token的header头解决方法...

    php前后端分离开发中要实现前后端参数信息交互,必须解决token标识验证问题. 步骤如下: 1.前端ajax发送请求时,要设置一个自定义header头.代码如下: $.ajax({ url:&quo ...

最新文章

  1. 打印服务不能启动 print spooler服务停止
  2. 和平精英为什么找不到服务器,和平精英为什么登不上去 和平精英游戏登不上原因分析...
  3. DateTime格式化问题
  4. mac catalina删除系统多余文件 内存不足_macOS Catalina Patcher(如何在旧mac上安装Catalina系统)...
  5. 西南医科大学计算机应用基础历年真题,网络选修课-计算机应用基础-期末考.docx...
  6. 常用并发工具类(线程池)
  7. 上海市社会保险费缴费标准
  8. 《我也能做CTO之程序员职业规划》之六:灵商
  9. iOS 之NSOperation(一)
  10. TTL电平和CMOS电平的区别,详细分析他们的区别
  11. IMC IMV SecurityCenter连通
  12. 设计Instagram
  13. 中国5G SA核心网UDM
  14. 自动生成banner网站
  15. 最优化问题——线性规划模型
  16. php 鼠标 移动 手型,css各种手型集合(css禁止手型)
  17. Python周刊491期
  18. 3.5 基本属性测试
  19. 分享一道美美美团面试题!
  20. SSM+图书馆电子文件资源管理 毕业设计-附源码191614

热门文章

  1. 端到端基于图像的伪激光雷达3D目标检测
  2. 树莓派 Linux 备份,Turtlebot3中级教程-树莓派系统备份与恢复
  3. 建立于因果推理与机器学习共识的稳定学习
  4. 第十六课.基于K-means的图像分割
  5. 生信服务器 | 更改 CentOS/RHEL 6/7 中的时区
  6. NC:中科院动物所王关红等综述基因技术防控蚊媒疾病
  7. 主题已放宽,科研UP主们速来Bio-protocol破浪吧
  8. Nature综述:微生物的衰老与寿命
  9. Cell子刊:人类微生物组参考基因集中的单体基因
  10. Peer J:整合高通量绝对丰度定量方法解析土壤细菌群落及动态