php不用jsonp也能跨域

js跨域方式无非就是使用jsonp,这种方法很大众,还有一种方式也可以,那就是在服务器端设置允许任何访问

PHP中代码为:
[php] view plain copy print?在CODE上查看代码片派生到我的代码片
01.header("Access-Control-Allow-Origin:*"); //允许任何访问(包括ajax跨域) 

PHP跨域访问的3种方法
近来项目中遇到跨服务器访问的问题,研究了好些日子,总结如下:

1、用file_get_contents方法
$host = 'url';
$randomNumber=file_get_contents($host);
echo $$randomNumber;


2、用Curl
$host = 'url';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host);
// 返回结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 使用POST提交
curl_setopt($ch, CURLOPT_POST, 1);
// POST参数
$str = array('a=1','b=2','c=3');
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
// 结果
$res = curl_exec($ch);
curl_close($ch);

使用curl库,使用curl库之前,你可能需要查看一下php.ini,查看是否已经打开了curl扩展

3、 用fopen打开url, 以get方式获取内容
<?php
$url="http://www.dnjs.net/";
$fp=fopen($url,'r');
while(!feof($fp)){
$result.=fgets($fp,1024);
}
echo" $result";
fclose($fp);
?>

将网页设置为允许 XMLHttpRequest 跨域访问
在非IE下,使用XMLHttpRequest 不能跨域访问,

除非要访问的网页设置为允许跨域访问。

将网页设置为允许跨域访问的方法如下:

Java

Response.AddHeader("Access-Control-Allow-Origin", "*");

或指定域名下可以访问:

Response.AddHeader("Access-Control-Allow-Origin", "http://www.1688hot.com:80");

PHP

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

echo:header("Access-Control-Allow-Origin: http://www.1688hot.com:80");

html

<meta http-equiv="Access-Control-Allow-Origin" content="*">

<meta http-equiv="Access-Control-Allow-Origin" content="http://www.1688hot.com:80">

在返回的响应信息中,使用 Access-Control-Allow-Origin 头来控制哪些域名的脚本可以访问该资源。如果设置 Access-Control-Allow-Origin:*,则允许所有域名的脚本访问该资源。如果有多个,则只需要使用逗号分隔开即可。

注意:在服务器端,Access-Control-Allow-Origin 响应头中的端口信息不能省略。

HTTPS和HTTP的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的。
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。


在被请求的php文件里增加:

header(“Access-Control-Allow-Origin: *”);
header(“Access-Control-Allow-Methods”, “POST,OPTIONS,GET”);

另外:

在chrome浏览器或者firefox浏览器里,由于安全限制的原因,本地调试JS,如果不配服务器环境而直接打开页面,那所有的AJAX操作会抛出下面错误:

XMLHttpRequest cannot load file:///D:/file.html. Origin null is not allowed by Access-Control-Allow-Origin.

Origin null is not allowed by Access-Control-Allow-Origin. 的意思就是由于安全原因浏览器不允许跨域访问。

chrome、firfox、opera都出现了这种情况,因为有安全沙箱,它们认为加载本地其它html文件为跨域访问。但是使用IE8就不会出现这种错误,很多人不是很理解。

这里Windows help and support 做出了解释 IE本身也并不是允许跨域的因为这样很不安全,但是如果不跨域的话又带来很多不便,所以会让你手动的选择一下是否允许跨域。而chrome、firfox、opera则默认就是不允许。

另外:

CORS的一篇文章:

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

另外:

如果脚本可以和同域的php交互的话,可以使用php的curl等方式帮助传输数据。

猜你喜欢

转载自weitao1026.iteye.com/blog/2301532