ajax跨域實現api 接口調用


背景: 想實現跨域去調用接口, 然后同時支持下次調用,能夠帶cookie信息過來,同時支持來自多個源頭的域名的跨域調用。

 

1.這樣支持來自所有域名的跨域調用:

不支持跨域是,瀏覽器報錯:

 

在api接口服務端加上相應的協議頭:

 header("Access-Control-Allow-Origin: *',);
 header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');

  但是,這樣的api接口,不支持cookie.

 

2.如果想支持cookie, 需要加上

header('Access-Control-Allow-Credentials: true');

  但是這樣的話,前面服務端設置的這個頭,瀏覽器就會報錯。說是access-control-allow-origin頭不能  用   * 這個通配符。

header("Access-Control-Allow-Origin: *',);

瀏覽器報錯如下圖: 

 

 

  

必須改成具體的某個域名。  但是,我們的api又希望支持來自許多不同域名的跨域訪問,怎么辦呢,這時候,在服務端做個動態的判斷處理就ok了。

<?php
$ret = array(
    'name' => isset($_POST['name'])? $_POST['name'] : '',
    'gender' => isset($_POST['gender'])? $_POST['gender'] : ''
);

header('content-type:application:json;charset=utf8');

$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';

$allow_origin = array(
    'http://www.client.com',
    'http://www.client2.com'
);

if(in_array($origin, $allow_origin)){
    header('Access-Control-Allow-Origin:'.$origin);
    header('Access-Control-Allow-Methods:POST');
    header('Access-Control-Allow-Headers:x-requested-with,content-type');
}

echo json_encode($ret);
?>

  參考:http://my.oschina.net/blogshi/blog/303758


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM