php 跨域请求执行了两次接口, CORS,

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

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

clipboard.png

get请求执行的:
clipboard.png

clipboard.png

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

clipboard.png
这种情况怎么解决?谢谢!

阅读 14k
6 个回答
if (strtolower($_SERVER['REQUEST_METHOD']) == 'options') {
    exit;
}

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

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

让写服务器的人改掉.

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

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

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

推荐问题
宣传栏