关于php下开发的跨域问题总结(全)

跨域问题介绍:

      在A网站中,我们希望使用Ajax来获得B网站中的特定内容。如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安全的。跨域访问违反了同源策略,同源策略的详细信息可以点击如下链接:Same-origin_policy; 
总而言之,同源策略规定,浏览器的ajax只能访问跟它的HTML页面同源(相同域名或IP)的资源

一.

 

1.    Apache中在被请求的域名所在服务器中打开LoadModule headers_module modules/mod_headers.so 模块,也就是httpd.conf这个文件里面改动,同时在httpd.conf中的

加上这句话,这个是允许所有域名进行跨域请求

这样子是只允许这个域名对我进行跨域请求

在框架内部可以进行:

2.    如何使Nginx支持跨域呢? 1,进入nginx的html目录 vim ../crossdomain.xml 具体路径: /usr/local/nginx/html/crossdomain.xml 2,在crossdomain.xml中添加:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

结果就是


注意:默认/usr/local/nginx/html/crossdomain.xml 是不存在的.

二.Jsonp的方式验证但是仅能用在于get方式的请求方式进行跨域请求

       1.前端的js或者jq请求jsonp的ajax:

1.      <script type="text/javascript">    

2.      $.ajax({    

3.          url:"http://crossdomain.com/services.php",    

4.          dataType:'jsonp',    

5.          data:'',    

6.          jsonp:'callback',    

7.          success:function(result) {    

8.              for(var i in result) {    

9.                  alert(i+":"+result[i]);//循环输出a:1,b:2,etc.    

10.             }    

11.         },    

12.         timeout:3000    

13.     });    

14. </script>  

2.后端的验证:

1.   function api_jsonp_encode($json)  

2.      {  

3.          if (!empty($_GET['callbak'])) {  

4.              return $_GET['callbak'] . '(' . $json . ')'// jsonp  

5.          }  

6.          return $json// json  

7.      }  


猜你喜欢

转载自blog.csdn.net/hoewang/article/details/80569450