后台使用PHP编写简单的接口
网上有很多关于如何配置header来解决跨域请求的问题,如下所示:
1 // 指定允许其他域名访问
2 header('Access-Control-Allow-Origin:http://127.0.0.1:8282');
3 // 响应类型
4 header("Access-Control-Allow-Methods:HEAD,POST,GET,PUT,DELETE,OPTIONS");
5 header("Access-Control-Max-Age:60");
6 header('Access-Control-Allow-Credentials: true');
7 // 响应头设置
8 header('Access-Control-Allow-Headers:x-requested-with,content-type');
9
10 $res = array("name" => "Echo","age" => 26);
11
12 echo json_encode($res);
13 return json_encode($res);
14
关于代码中配置的header,我曾尝试很多次仍没有办法成功,现在针对自己的经验讲解注意问题:
-
Access-Control-Allow-Origin:http://127.0.0.1:8282或者
Access-Control-Allow-Origin:* 两者配置都可以,但是要注意的是
http://127.0.0.1:8282以及*都不需要带上单引号或者双引号!
-
Access-Control-Allow-Credentials: true 如若配置该项,则在前端请求代码中的头部信息中同样也要配置
//跨域时,cookie添加到请求中 $httpProvider.defaults.withCredentials = true;
- 在以上配置好后如果遇到预检OPTIONS请求,则不妨试试
Access-Control-Allow-Headers:x-requested-with,content-type 在options预检后,浏览器会自动重新发送正常的请求,像这样:
![](http://image101.360doc.com/DownloadImg/2016/11/2114/85061195_2.png)
![](http://image101.360doc.com/DownloadImg/2016/11/2114/85061195_3.png)
![](http://image101.360doc.com/DownloadImg/2016/11/2114/85061195_4.png)
前端代码中在配置url时
url="http://127.0.0.1/study/phpServer/test.php"; 一定不要忘记加上http:// 如果url=127.0.0.1/study/phpServer/test.php
不然请求地址会在前面加上当前浏览地址:
http://127.0.0.1:8282/127.0.0.1/study/phpServer/test.php 从而请求不到数据
另外据网上信息提示,如果要在
1 | Access-Control-Allow-Origin处理多个域的话,如下设置
|
1 2 3 4 5 6 7 8 9 10 | $sorigin = array (
'domain1' ,
'domain2'
);
if (in_array( $origin , $origins )){
header( 'Access-Control-Allow-Origin:' . $origin );
header( 'Access-Control-Allow-Methods:POST' );
header( 'Access-Control-Allow-Headers:x-requested-with,content-type' );
}
|
但是暂时还没有试验~
![](http://www.cnblogs.com/echo2016/p/f:\options.png)
|