• 前端跨域解决方案


    打包前端项目体验

    • 生产环境和开发环境配置
    • 上线使用nginx进行代理跨域
    • 上线使用后端进行跨域

    评估结果 Result

    方法软件优点缺点
    前端跨域webpack直接在前端进行跨域,实质是利用webpack作为代理转发给服务器上线之后不可以用,而且有时候还是需要后端也要设置跨域。
    后端跨域SpringBoot、Neo4j直接进行配置跨域即可,接收来自所有域的请求时,前端不能是withCredential。需要自己写后端或联系后端
    nginx跨域nginx实质效果和webpack跨域差不多,因为跳过了浏览器,所以不会被CORS需要看看后端是否进行了跨域,不然浏览器还是会出现CORS不符合标准的错误

    nginx跨域配置

    下面是一些跨域配置,前端部署在9998,但是我需要访问部署在10000端口的服务和7474端口的图形数据库,因此按照如下配置。相当于只为来自9998端口的请求代理,然后访问neo4j的时候你需要隐藏添加的origin,因为neo4j已经设置了可以跨域,相当于我们在nginx端进行了集成管理外部接口。

    server {
    	listen       9998;
    	server_name  localhost;
    	location / {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' '*';
            add_header 'Access-Control-Allow-Methods' '*';
            root G:\\Webapps\\beidou; 
        }
    
        location = /50x.html {
            root   html;
        }
    }
    # 负责请求转发,跨域
    server {
        listen 9997;
        server_name localhost:9998;
    
        add_header 'Access-Control-Allow-Origin' 'http://localhost:9998';
        add_header 'Access-Control-Allow-Credentials' 'true';
    
        location /encrypt {
            proxy_pass http://localhost:10000/encrypt;
        }
    
        location /neo4j {
            proxy_hide_header 'Access-Control-Allow-Origin';
            proxy_pass http://localhost:7474/db/neo4j/tx/commit;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    前端上线和开发环境配置

    // vite.config.ts开发环境
    // 自己的加密方法,部署需要一起部署
    "/encrypt": {
      target: "http://localhost:10000",
        changeOrigin: true
    }
    // .env.production生产环境
    // 取消前端的代理
    VITE_Encrypt_Server = "http://localhost:9997/encrypt"
    VITE_NEO4J_Server = "http://localhost:9997/neo4j"
    // 处理方法
    private RSAEncrypt(jsonData) {
      const axiosConfig = {
        method: "post",
        url:
          import.meta.env.MODE == "development"
          ? "/encrypt"
          : import.meta.env.VITE_Encrypt_Server,
        headers: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
        data: jsonData
      }
      return axios(axiosConfig)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    【算法】快速排序与归并排序
    记录beforeRouteEnter函数内部 this 是undefined的解决方案
    webpack与vue-cli的关系
    FusionConpute虚拟机的发放与管理
    let const var区别
    Spring(三)
    linux系统配置Samba实现与Windows系统的文件共享
    《scala 编程(第3版)》学习笔记4
    调用线程的run()和start()方法有什么不同呢?
    客快物流大数据项目(七十一):impala-shell命令参数
  • 原文地址:https://blog.csdn.net/qq_45605535/article/details/133606260