解决异步请求时跨域访问或同源策略的问题

<?php
/**
 * 异步访问的同源策略
 * :异步请求禁止跨域访问,也就是http://sina.com不会让http://localhost去异步调用请求。
 * :解决这个问题可以使用iframe模拟异步请求,或者使用getJSON之类的函数。比较明智的方法还
 * :有使用一个服务器代理。
 * version : 01
 */
	$allowed_hosts=array(
		'mysite'=>array(
			'protocal'=>'http',
			'mimetype'=>'application/json',
			'args'=>array(
				'login'=>'user',
				'apikey'=>'secret'
			)
	));
	//返回请求的主机名
	$request_host=parse_url('http:/'.$_SERVER['PATH_INFO'],PHP_URL_HOST);
	if(!isset($allowed_hosts[$request_host])){
		header("Status: 430 Forbidden");
		exit;
	}
	//创建正确的url请求
	$url=$allowed_hosts[$request_host]['protocal'].':/'.$_SERVER['PATH_INFO'];
	if(!empty($_SERVER['QUERY_STRING'])){
		$url.='?'.http_build_query($_GET + isset($allowed_hosts[$request_host]['args'])? $allowed_hosts[$request_host]['args'] : array());
	}
	//cul请求处理
	$curl=curl_init($url);
	if($_SERVER['REQUEST_METHOD']=='POST'){
		$data=http_build_query($_POST);
		curl_setopt($curl,CURLOPT_POST,true);
		curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
	}
	curl_setopt($curl,CURLOPT_HEADER,false);
	curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
	$response=curl_exec($curl);
	//处理请求返回数据
	$status=curl_getinfo($curl,CURLINFO_HTTP_CODE);
	if($status>='400'){
		header('Status:500 Internal Server Error');
	}
	header('Content-Type:'.$allowed_hosts[$request_host]['mimetype']);
	echo $response;
	curl_close($curl);
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值