跨域问题介绍:
在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. }