之前学习写后台的时候,与前端沟通的时候,前端有一次反映过出现了跨域的问题(实际上没出现),这勾起了我对跨域这个东西的兴趣。因为之前在学校学前端的时候,有一次出现了跨域的问题,慌得不行,所以就决定上网冲浪研究一下跨域这个东西。
跨域问题的出现
跨域指的是浏览器从一个域名的网页请求另一个域名时,域名、端口、协议任一不同,都是跨域。
看了一下网上的资料,大概都是说,跨域问题的出现:主要是因为浏览器的同源策略。
浏览器的同源机制
同源机制是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。
前端请求的url必须与浏览器的url处于同域,也就是它们两者的域名、端口、协议必须相同。
同源策略限制以下行为:
- Cookie、LocalStorage和IndexDB无法读取
- DOM和JS对象无法获取
- AJAX请求不能发送
解决方案
在网上看到不少关于跨域的解决方案,在这里讲之前后台大佬解决跨域问题的方案:
CORS(跨域资源共享):
在服务端设置Access-Control-Allow-Origin HTTP响应头部之后,浏览器将会允许跨域请求。
@Overridepublic 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);}复制代码