ThinkPHP 5.1 跨域配置方法

 更新时间:2019年10月11日 15:29:36   作者:viva_la_free  
今天小编就为大家分享一篇ThinkPHP 5.1 跨域配置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

因为最近的项目采用了API接口开发方式,后端需要配置跨域的规则以便前端能够访问。

系统采用的框架为 ThinkPHP,版本 5.1.19

关于OPTIONS请求

由于前端的知识不是很熟悉,查阅了网上的资料得知,OPTIONS 请求是在 AJAX 发送请求前发送的一个验证请求,该请求会验证一系列规则,若符合规则则会发送实际的 GET 或 POST 请求,跨域的规则也是 OPTIONS 请求时进行验证的。

遇到的问题

按照网上大部分关于跨域请求的配置,基本都是以下三行代码:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
header('Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS,PATCH');

把这三行代码放到 /route/route.php,/route/api.php,/public/index.php 以及受访问的控制器文件头部均出现以下报错信息:

Failed to load http://url.com/main/info: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'null' is therefore not allowed access.The response had HTTP status code 404.

说明配置并没有生效。

查阅 ThinkPHP 的文档,文档给出的例子:

Route::get('new/:id', 'News/read')
  ->ext('html')
  ->allowCrossDomain();

意思是只需要在路由的尾部添加 allowCrossDomain() 即可,所以我在每个需要进行跨域访问的路由后都添加了 ->allowCrossDomain(),问题得以解决。

另外的问题

由于前端的 AJAX 请求通常需要携带 token 验证,所以还需要将 token 添加到 Access-Control-Allow-Headers

文档的例子是

Route::get('new/:id', 'News/read')
  ->ext('html')
  ->header('Access-Control-Allow-Origin','thinkphp.cn')
  ->header('Access-Control-Allow-Credentials', 'true')
  ->allowCrossDomain();

我按照上面的方法添加了 ->header('Access-Control-Allow-Headers','token') ,再次请求出现了下面的报错:

Failed to load: http://url.com/main/info: Request header field token is not allowed by Access-Control-Allow-Headers in preflight response.

header 的配置没有生效。

解决办法:将 header('Access-Control-Allow-Headers: content-type,token'); 添加到 入口文件 /public/index.php 即可。

以上这篇ThinkPHP 5.1 跨域配置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • PHP5.4起内置web服务器使用方法

    PHP5.4起内置web服务器使用方法

    这篇文章主要为大家详细介绍了PHP5.4内置web服务器,内置的Web服务器只是提供开发测试使用,不推荐使用中生产环境中,具体内容请阅读下文
    2016-08-08
  • smarty模板引擎基础知识入门

    smarty模板引擎基础知识入门

    这篇文章主要介绍了smarty模板引擎基础知识入门,较为详细的分析了smarty的基本概念并实例分析了相关的基本用法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP 类相关函数的使用详解

    PHP 类相关函数的使用详解

    本篇文章是对PHP类的相关函数的使用进行了分析介绍。需要的朋友参考下
    2013-05-05
  • 微信获取用户地理位置信息的原理与步骤

    微信获取用户地理位置信息的原理与步骤

    这篇文章主要介绍了微信获取用户地理位置信息的原理与步骤的相关资料,需要的朋友可以参考下
    2015-11-11
  • 双冒号 ::在PHP中的使用情况

    双冒号 ::在PHP中的使用情况

    前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况
    2015-11-11
  • laravel通过a标签从视图向控制器实现传值

    laravel通过a标签从视图向控制器实现传值

    今天小编就为大家分享一篇laravel通过a标签从视图向控制器实现传值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • PHP生成唯一订单号的方法汇总

    PHP生成唯一订单号的方法汇总

    前阵子有个电子商务项目,需要生成订单号。当时的考虑很简单,取系统时间加上随机数,或者使用 uniqid() 方法。仔细考虑下上述方法,在顾客购买量少的情况下,订单重复的可能性为零,但是在购买高蜂期生成的订单号重复是很有可能发生的。
    2015-04-04
  • laravel model模型定义实现开启自动管理时间created_at,updated_at

    laravel model模型定义实现开启自动管理时间created_at,updated_at

    今天小编就为大家整理了一篇laravel model模型定义实现开启自动管理时间created_at,updated_at,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • php实现快速排序的三种方法分享

    php实现快速排序的三种方法分享

    这篇文章主要介绍了php实现快速排序的三种方法,三种方法各有优缺点,需要的朋友可以参考下
    2014-03-03
  • ThinkPHP让../Public在模板不解析(直接输出)的方法

    ThinkPHP让../Public在模板不解析(直接输出)的方法

    这篇文章主要介绍了ThinkPHP让../Public在模板不解析,直接输出的方法,涉及通过模板常量设置修改默认变量替换的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论