extjs 跨域请求先后台

首先简单了解下什么是跨域:javascript

跨域,指的是浏览器不能执行其余网站的脚本。它是由浏览器的同源策略形成的,是浏览器对javascript施加的安全限制。php

所谓同源是指,域名,协议,端口均相同,不明白不要紧,举个栗子:html

http://www.666.com/index.html 调用 http://www.666.com/server.php (非跨域)前端

http://www.666.com/index.html 调用 http://www.777.com/server.php (主域名不一样:666/777,跨域)java

http://abc.666.com/index.html 调用 http://def.666.com/server.php (子域名不一样:abc/def,跨域)ajax

http://www.666.com:8080/index.html 调用 http://www.666.com:8081/server.php (端口不一样:8080/8081,跨域)后端

http://www.666.com/index.html 调用 https://www.666.com/server.php (协议不一样:http/https,跨域)跨域

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。浏览器

浏览器执行javascript脚本时,会检查这个脚本属于哪一个页面,若是不是同源页面,就不会被执行。安全

 

大体了解后废话少数,直接上代码;

extjs 前端代码:

    //跨域请求修改数据
        $.ajax({
            type : "POST",
            url : 'http://10.18.66.66:8080/SK/updateUnitProjectMonthPlanStatus.do',
            traditional : true,//规定是否使用传统的方式浅层进行序列化(参数序列化)
            data : {
                'MONTH_PLAN_ID_' : monthPlan.MONTH_PLAN_ID_
            },
            xhrFields : {
                withCredentials : true
            },
            success : function(data) {
                if (data.success) {
                    //alert("解除工程预算,成功!");
                }
            },
            error : function() {
                Ext.MessageBox.alert('诶,跨域失败了,服务器大哥那边不愿。', data.message, Ext.MessageBox.ERROR);
            }
        });

JAVA后端

     response.addHeader("P3P", "CP=CAO PSA OUR");// 使用P3P协议自动更改IE浏览器安全级别
        // 获取请求方地址request.getHeader("Origin")
        // 设置容许跨域
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        // 是否容许后续请求携带认证信息(cookies),该值只能是true,不然不返回
        response.setHeader("Access-Control-Allow-Credentials", "true");
相关文章
相关标签/搜索