后台使用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预检后,浏览器会自动重新发送正常的请求,像这样:
前端代码中在配置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
从而请求不到数据
另外据网上信息提示,如果要在
Access-Control-Allow-Origin处理多个域的话,如下设置
$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'); }
但是暂时还没有试验~