PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > Fastadmin

【分享】API跨域解决方案

管理员 2024-12-14
Fastadmin
7

开发api时,最常见的问题也是跨域问题。今天给大家分享一下。

什么是跨域问题

什么是同源

所谓的同源,就是三个“同”:

  1. 同一个协议(如http协议)
  2. 同一个域名
  3. 同一个端口(如80端口)

如果两个资源的上面三个元素相同,那么就认为这两个资源是同源的。

浏览器跨域

有些人会有疑问:为什么同一个请求,我用php curl发起则没有跨域问题,在浏览器中就会提示跨域?

这是因为跨域问题是浏览器引发的,当你在浏览器中的A页面发起一个B请求时,对于服务端返回的数据,浏览器会判断当前A页面和你发起B请求是否同源,如果不是,浏览器则认为这是不安全的,因此拦截了你的请求。

所以解决跨域的问题也简单,服务端在返回的数据中添加一个header,告诉浏览器我愿意被这个不同源的家伙访问,浏览器看到有这个header自然就给你放行了。

option

当你的前端web,跨域访问api时,你可能会发现,同一个请求,你代码中明明只调用一次,实际上却请求了两次。

这是为啥?

其实这是浏览器的一次试探行为,因为浏览器知道你要请求的接口跟你页面本身不同源,所以它会发起一次method为option的请求来试探一下是否允许跨域请求。

如果你不知道这个茬,一个请求发起两次很可能会导致你的业务重复执行。

解决方案

以php为例,只需在服务端中添加header告诉浏览器允许跨域请求即可。

header('Access-Control-Allow-Origin: *'); //星号表示允许所有来源跨域请求,生产环境建议配置成你的来源站点的域名header("Access-Control-Allow-Headers: token,hehe,dada,此处增加你的自定义请求头,Origin, X-Requested-With, Content-Type, Accept");header('Access-Control-Allow-Methods: POST,GET,OPTIONS');if (request()->isOptions()) { //浏览器的option试探请求,要exit掉,不然你的业务会被执行两次   exit();}

希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部