浅谈服务端对跨域的处理

   由于这两天在做项目的时候遇到了跨域这个问题,为了加深记忆和理解所以在这里献丑谈谈自己的看法。如果有不同的声音希望大家能够拍砖指出。

1.什么是跨域

  跨域是指浏览器不能执行非本域下的请求,也就是说你提交的post、get请求不是你自己的服务器域。这是浏览器的一种处于安全限制的同源策略所致,它指Ajax请求所在的页面和被请求的页面在协议、域名、端口均相同才能被访问。
 例如:
 http://a.baidu.com 和  http://b.baidu.com就是存在跨域访问的。

2.CORS解决跨域

  跨域的解决方案挺多的,但是我都不会,所以还是主要跟谈谈在服务端对跨域的处理吧。

   CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。就是说CORS 通过在 HTTP 设置header信息来允许服务器指定哪些跨域请求是允许的。

实现filter,在拦截器中设置

public class SimpleCORSFilter implements Filter
{

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException
    {
        HttpServletResponse response = (HttpServletResponse) res;  
        response.setHeader("Access-Control-Allow-Origin", "*");  
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");  
        response.setHeader("Access-Control-Max-Age", "3600");  
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Cache-Control, token");
        chain.doFilter(req, res);

    }


    @Override
    public void destroy()
    {
        // TODO Auto-generated method stub

    }


    @Override
    public void init(FilterConfig arg0) throws ServletException
    {
        // TODO Auto-generated method stub

    }

}

参数解释:
Access-Control-Allow-Origin
这个Header是用来告诉浏览器,我的这个URL的资源是允许任何来源的请求访问我,如果值是*则表示表示接受任意域名的请求。

Access-Control-Allow-Methods:
顾名思义,表明服务器支持的所有跨域请求的方法。

Access-Control-Max-Age:
用来指定本次预检请求的有效期,单位为秒。在上面的设置中,即允许缓存该条回应为3600秒,在此期间不用发出另一条预检请求。

Access-Control-Allow-Headers:
表明服务器支持的所有头信息字段,不限于浏览器在”预检”中请求的字段。原文:The Access-Control-Allow-Headers header is used in response to a preflight request to indicate which HTTP headers can be used when making the actual request.

3.总结

    本位写的比较简单,主要以总结为主。

参考链接:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Headers

http://www.ruanyifeng.com/blog/2016/04/cors.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值