前后端分离的跨域问题
一、问题分析:
前端与后端协议、域名、端口有一项不同,浏览器依然会请求数据到后端,但不接收后端响应的结果的现象。
二、产生问题的原因:
- 用户在浏览器输入的URL中包含的协议、域名、端口都完全相同。如果有一项不同,浏览器会觉得有安全问题,从而产生跨域问题。
- 如果使用Postman等开发工具进行交互是不会出现跨域问题,这是浏览器特有的限制。
- 在后端服务添加CORS策略的配置就可以解决跨域问题。
三、解决跨域问题具体方案:
- 普通Web项目,添加一个crossdomain.xml文件。
- Spring项目,添加处理跨域的过滤器或拦截器。
- Spring boot项目,在支持跨域的方法上添加@CrossOrigin注解。
- Spring boot项目更便捷的方式,实现WebMvcConfigurer接口中的addCorsMappings方法。
- Ngnix配置反向代理,例如:用户访问网址为192.168.0.1:80,网页ajax获取192.168.0.1:8080跨域数据,可以在ngnix.conf中配置192.168.0.1:80的server的location /cors/ {proxy_pass http://localhost:8080/user}。此时192.168.0.1:80的网页可以通过192.168.0.1:80/cors/访问到http://localhost:8080/user。