跨域请求

同源策略限制:

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果没有同源策略,攻击者可以通过JavaScript获取你的邮件以及其他敏感信息,比如说阅读私密邮件,发送虚假邮件,查看聊天记录等等。 所谓同源是指,协议,域名,端口相同。三者只有有一个不相同,就认为不同源!

解决方式一(jsonp):

1.服务端:

/**
 * 我的假期
 */
public String getApplyLeaveCount(){
    resultJSON.clear();
    try {
        String result = getRequest().getParameter("callback") + "({'annualLeave':'36','exchangeLeave':'12','code':0})";
        getResponse().getWriter().print(result);
        getResponse().getWriter().close();
    }catch (Exception e){
        e.printStackTrace();
    }
    return SUCCESS;
}

2.客户端:

$.ajax({
    async: false,
    url: "http://192.168.2.30:8080/attendanceClient/manager/applyLeave/getApplyLeaveCount.action",
    type: "GET",
    dataType: 'jsonp',//一种非官方跨域数据交互协议
    //要传递的参数,没有传参时,也一定要写上
    data: null,
    timeout: 5000,
    //返回Json类型
    contentType: "application/json;utf-8",
    //服务器段返回的对象包含name,data属性.
    success: function (result) {
        $('#annualLeave').html(result.annualLeave);
        $('#exchangeLeave').html(result.exchangeLeave);
    }
});
请求后台时的路径:


返回值:

解决方式二(CORS):

设置Response Headers:
        response.setContentType("text/html;charset=UTF-8");
        response.setHeader("Access-Control-Allow-Origin", "*");//指定允许其他域名访问,必须设置
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");//响应类型
        response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, " +
                "Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");//响应头设置
    
      
       

JSONP和CORS对比:

1.JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2.使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3.JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值