php 跨域请求执行了两次接口, CORS,
怪我咯
怪我咯 2017-04-11 10:38:53
[PHP讨论组]

php,请求跨域接口;执行了两次请求;OPTIONS(预处理);get(真正请求);

按理来说,OPTIONS(预处理) 只是判断 header('Access-Control-Allow-Headers:x-requested-with,content-type');是否通过;通过了,才执行get;
现在出现的问题是,OPTIONS请求也执行了一次程序;然后get也执行了一次程序;
OPTIONS请求执行的:

get请求执行的:

接口服务器:配置的跨域请求


这种情况怎么解决?谢谢!

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(6)
高洛峰
if (strtolower($_SERVER['REQUEST_METHOD']) == 'options') {
    exit;
}
PHP中文网

跨域遇到复杂请求时, 会先发送options去试探是否支持跨域, 所以有两次请求完全正常...不需要理会...

迷茫

如果不使用代理,你需要配置Apache服务器允许跨域请求,而不是在php文件添加几个参数

PHP中文网

让写服务器的人改掉.

能用options (和get) 编辑收藏是个安全隐患.. 你们不怕csrf吗

高洛峰

服务端加个判断语句。如果是option请求直接返回true不要执行到控制器

高洛峰

首先,跨域请求分为两种,一种是简单请求,即get请求和post请求(不带多余的请求头),这种情况下,浏览器会直接请求,在有允许跨域的头的情况下,予以显示。(这里并不是说没有跨域头服务器就不返回数据了,数据是照常返回的,但是浏览器拦截了返回数据。)
另一种呢是复杂请求,即非getpost请求,或者是有了自定义头的请求。这种情况下,浏览器会首先发送一个options请求(预请求),来确是否允许跨域。在服务器返回的跨域条件都允许之后,浏览器才会发送正式请求。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号