1、建立中间件Cors.php 
命令:php artisan make:middleware Cors 
/app/Http/Middleware/ 目录下会出现一个Cors.php 文件。

内容如下:

<?phpnamespace App\Http\Middleware;use Closure;class Cors
{/*** Handle an incoming request.** @param  \Illuminate\Http\Request  $request* @param  \Closure  $next* @return mixed*/public function handle($request, Closure $next){$response = $next($request);$response->header('Access-Control-Allow-Origin', '*');$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept, multipart/form-data, application/json');$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');$response->header('Access-Control-Allow-Credentials', 'false');return $response;}
}

其中有以下需要注意的地方:

  • 对于跨域访问并需要伴随认证信息的请求,需要在 XMLHttpRequest 实例中指定 withCredentials 为 true。
  • 这个中间件你可以根据自己的需求进行构建,如果需要在请求中伴随认证信息(包含 cookie,session)那么你就需要指定 Access-Control-Allow-Credentials 为 true, 因为对于预请求来说如果你未指定该响应头,那么浏览器会直接忽略该响应。
  • 在响应中指定 Access-Control-Allow-Credentials 为 true 时,Access-Control-Allow-Origin 不能指定为 *(这个一定要注意,我就是在这个地方调了好久)
  • 后置中间件只有在正常响应时才会被追加响应头,而如果出现异常,这时响应是不会经过中间件的。

2、在 Kernel.php文件中的$middleware中加入刚刚添加的中间件:\App\Http\Middleware\Cors::class, 

protected $middleware = [\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,\App\Http\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::class,\Illuminate\View\Middleware\ShareErrorsFromSession::class,\App\Http\Middleware\Cors::class,];

跨源资源共享标准

跨源资源共享标准通过新增一系列 HTTP 头,让服务器能声明哪些来源可以通过浏览器访问该服务器上的资源。另外,对哪些会对服务器数据造成破坏性响应的 HTTP 请求方法(特别是 GET 以外的 HTTP 方法,或者搭配某些 MIME 类型的 POST 请求),标准强烈要求浏览器必须先以 OPTIONS 请求方式发送一个预请求(preflight request),从而获取知服务器端对跨源请求所支持 HTTP 方法。在确认服务器允许跨源请求的情况下,以实际的 HTTP 请求方法发送那个真正的请求。服务器端也可以通知客户端,是不是需要随同请求一起发送信用信息(包括 Cookies 和 HTTP 认证相关数据)。

跨源共享标准需要浏览器和服务端共同配合才能完成,目前浏览器厂商已经可以将请求部分自动完成,所以跨源资源访问的重点还是在于服务器端。

下面列出一些标准中可用的响应头和请求头。

Response Header

Access-Control-Allow-Origin : 指明哪些请求源被允许访问资源,值可以为 “*”,”null”,或者单个源地址。

Access-Control-Allow-Credentials : 指明当请求中省略 creadentials 标识时响应是否暴露。对于预请求来说,它表明实际的请求中可以包含用户凭证。

Access-Control-Expose-Headers : 指明哪些头信息可以安全的暴露给 CORS API 规范的 API。

Access-Control-Max-Age : 指明预请求可以在预请求缓存中存放多久。

Access-Control-Allow-Methods : 对于预请求来说,哪些请求方式可以用于实际的请求。

Access-Control-Allow-Headers : 对于预请求来说,指明了哪些头信息可以用于实际的请求中。

Origin : 指明预请求或者跨域请求的来源。

Access-Control-Request-Method : 对于预请求来说,指明哪些预请求中的请求方式可以被用在实际的请求中。

Access-Control-Request-Headers : 指明预请求中的哪些头信息可以用于实际的请求中。

Request Header

Origin : 表明发送请求或预请求的来源。

Access-Control-Request-Method : 在发送预请求时带该请求头,表明实际的请求将使用的请求方式。

Access-Control-Request-Headers : 在发送预请求时带有该请求头,表明实际的请求将携带的请求头。

转自:https://blog.csdn.net/leedaning/article/details/53787008

转载于:https://www.cnblogs.com/lamp01/p/8892001.html

Laravel开启跨域的方法相关推荐

  1. jquery、javascript实现(get、post两种方式)跨域解决方法

     jquery.javascript实现(get.post两种方式)跨域解决方法 一.实现get方式跨域请求数据 浏览器端 <script> $(document).ready(fun ...

  2. React项目中请求跨域解决方法

    React项目中请求跨域解决方法 今天经理给我了一个React项目地址,让我拉下来并跑起来,拉下来运行起来后,发现所有的请求都失败了,并且都是由于跨域问题导致的.花了点时间,解决了这个问题,在这里记录 ...

  3. 跨域解决方法——jsonp原理

    跨域解决方法--jsonp原理 一个域名地址的组成: 当协议.子域名.主域名.端口号任意一个不相同时,都算作不同域,不同域之间相互请求资源,就算做"跨域".由于浏览器同源策略的限制 ...

  4. vue跨域问题解决方法

    vue跨域解决方法 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报"No 'Access-Control-Allow-Origin' ...

  5. 什么是跨域 解决跨域的方法 (分分钟)

    一 ,为什么会出现跨域问题 处于浏览器的同原则策略(Sameoriginpolicy)是一种约定,它是浏览器最核心 也是基本的安全共功能,如果缺少了同源策略,则浏览器的正常功能可能会 收到影响.可以说 ...

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

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

  7. laravel php跨域请求,laravel开发中跨域的解决方案

    前言 众所周知我们大家在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口(也可能是其他人的机器) , 例如 localhost:8000 , 而 l ...

  8. 5种处理js跨域问题方法汇总(转载)

    1.JSONP跨域GET请求 ajax请求,dataType为jsonp.这种形式需要请求在服务端调整为返回callback([json-object])的形式.如果服务端返回的是普通json对象.那 ...

  9. Spring Boot2.x-13前后端分离的跨域问题解决方法之Nginx

    文章目录 概述 浏览器同源策略 后台搭建 pom.xml interceptor 配置 Controller 启动测试 浏览器和session 后端工程发布到服务器上 问题复现 通过Nginx反向代理 ...

最新文章

  1. 女程序员也有35岁危机焦虑吗?
  2. PHP接收上传的文件
  3. 简述ospf的各种报文
  4. 编译DirectShow Samples
  5. 挑出IIS日志里某一文件的请求次数
  6. 自用 x86 GetProcAddress + GetModuleHandle
  7. python get post区别_大话Python, webpy教程之GET和POST区别
  8. plsql 为空显示 0 的函数_不加班只加薪!从0到1教你制作出入库进销存表格
  9. RNN,LSTM,GRU的理解
  10. Linux常用命令——chattr、lsattr
  11. Adding Keyword And Description meta tags to each page by inheritence
  12. P1070 道路游戏
  13. MySQL问题解决:-bash:mysql:command not found
  14. CLOSE_WAIT状态的原因与解决方法(2)
  15. mean python_Python mean()方法的详细指南
  16. thinkphp5--文章发布后台管理系统
  17. Java中ArrayList和LinkedList以及queue的模仿
  18. Visual Studio报错:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值...
  19. 北京大学计算机系 丁主任,北大“扫地僧”韦东奕,真的是正常人吗?北大丁教授说出了答案...
  20. Java 创建并应用PPT幻灯片母版

热门文章

  1. jQuery与其它库冲突的解决方法(转)
  2. this.options[selectedIndex]的使用
  3. 安装ATi显卡驱动后增加的鼠标右键菜单的清理
  4. 再发布一个windows live writer 插件 图标信息框 wlw plugin icon info frame
  5. 按拼音模糊匹配查询条件的生成类
  6. linux新建文件权限问题
  7. Google Test(GTest)使用方法和源码解析——Listener技术分析和应用
  8. C++中struct的使用
  9. OpenCV中resize函数五种插值算法的实现过程
  10. RANSAC鲁棒参数估计