IT评测·应用市场-qidao123.com技术社区

标题: 跨域问题及解决方案 [打印本页]

作者: 火影    时间: 2024-9-8 21:08
标题: 跨域问题及解决方案
跨域问题及解决方案


  
一、什么是跨域问题

跨域问题是指欣赏器基于安全性的同源计谋,阻止网页向不同源(域名、协议或端口不同的服务器)请求资源时所遇到的限定。这个问题紧张在前端开发中出现,当欣赏器拒绝执行前端页面发出的跨域请求时,开发者就会遇到跨域问题。
同源计谋
同源计谋(Same-Origin Policy)是欣赏器的一种安全机制,用来防止不同源之间的恶意活动。所谓"同源",是指协议域名端口三者都雷同。只有当这三者完全一致时,才被认为是同源。
举个例子:
   如果前端页面的URL是http://example.com:80
  
  :
  
  二、跨域问题的产生

跨域问题的产生:

三、跨域问题的常见场景

四、跨域问题的解决

使用过滤器解决

通过自定义Filter设置相应头信息,来实现跨域访问控制,这种方式比力灵活,但相对比力繁琐。
  1. @Component
  2. public class CorsFilter implements Filter {
  3.     @Override
  4.     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
  5.         HttpServletResponse response = (HttpServletResponse) res;
  6.         HttpServletRequest request = (HttpServletRequest) req;
  7.         response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
  8.         response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
  9.         response.setHeader("Access-Control-Allow-Credentials", "true");
  10.         response.setHeader("Access-Control-Max-Age", "3600");
  11.         chain.doFilter(req, res);
  12.     }
  13. }
复制代码
解决方案明白图:

使用署理服务器解决

使用前端开发服务器(如webpack-dev-server)或Nginx署理请求,将请求转发给后端服务器,从而避开欣赏器的同源计谋限定。
通过nginx或Node.js署理后,获取url为http//localhost:8081/xxx.html的html页面
获取url 为http://localhost:8081/api/xxx页面内的数据 ,雷同的http://localhost:8081并不会引发跨域问题,只不外带api前缀的被Node.js或ngiinx署理了,向http://localhost:8080/xxx获取对应资源后再返回给客户端
  1. module.exports = {
  2.     devServer:{
  3.         proxy:{
  4.             '/api':{//匹配所有以'/api'开头的请求路径
  5.                 target:'http://localhost:8081',//代理目标的基础路径
  6.                 changeOrigin:true, //可要可不要看具体需求
  7.                 pathRewrite:{'^/api':''}  //可要可不要看具体需求
  8.             }   
  9.                  }
  10.     }
  11. }
复制代码
解决方案明白图:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4