跨域问题及解决方案

以前学习写后台的时候,与前端沟通的时候,前端有一次反映过出现了跨域的问题(实际上没出现),这勾起了我对跨域这个东西的兴趣。由于以前在学校学前端的时候,有一次出现了跨域的问题,慌得不行,因此就决定上网冲浪研究一下跨域这个东西。前端


跨域问题的出现

跨域指的是浏览器从一个域名的网页请求另外一个域名时,域名、端口、协议任一不一样,都是跨域。跨域

看了一下网上的资料,大概都是说,跨域问题的出现:主要是由于浏览器的同源策略。浏览器

浏览器的同源机制

同源机制是浏览器最核心也最基本的安全功能,若是缺乏了同源策略,浏览器很容易受到XSS、CSFR等攻击。安全

前端请求的url必须与浏览器的url处于同域,也就是它们二者的域名、端口、协议必须相同。bash

同源策略限制如下行为:ide

  1. Cookie、LocalStorage和IndexDB没法读取
  2. DOM和JS对象没法获取
  3. AJAX请求不能发送

解决方案

在网上看到很多关于跨域的解决方案,在这里讲以前后台大佬解决跨域问题的方案:学习

CORS(跨域资源共享):

在服务端设置Access-Control-Allow-Origin HTTP响应头部以后,浏览器将会容许跨域请求。url

@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, OPTIONS, DELETE, PUT");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers",
            "Content-Type, x-requested-with, X-Custom-Header, Authorization, token");
    chain.doFilter(req, res);
}复制代码
相关文章
相关标签/搜索