php不用jsonp也能跨域
js跨域方式无非就是使用jsonp,这种方法很大众,还有一种方式也可以,那就是在服务器端设置允许任何访问
PHP中代码为:
[php]viewplaincopyprint?在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
<metahttp-equiv="Access-Control-Allow-Origin"content="*">
<metahttp-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操作会抛出下面错误:
XMLHttpRequestcannotloadfile:///D:/file.html.OriginnullisnotallowedbyAccess-Control-Allow-Origin.
OriginnullisnotallowedbyAccess-Control-Allow-Origin.的意思就是由于安全原因浏览器不允许跨域访问。
chrome、firfox、opera都出现了这种情况,因为有安全沙箱,它们认为加载本地其它html文件为跨域访问。但是使用IE8就不会出现这种错误,很多人不是很理解。
这里Windowshelpandsupport做出了解释IE本身也并不是允许跨域的因为这样很不安全,但是如果不跨域的话又带来很多不便,所以会让你手动的选择一下是否允许跨域。而chrome、firfox、opera则默认就是不允许。
另外:
CORS的一篇文章:
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
另外:
如果脚本可以和同域的php交互的话,可以使用php的curl等方式帮助传输数据。