关于#跨域#的问题,如何解决?

img


部署springboot前后端分离vue项目到阿里云服务器上,前后端能单独访问,从前端页面不能发送请求提示的是这个,想到的解决方法是把前端页面发送ajax请求地址改为服务器地址但是太多了而且也没效果(原本两个报错改了之后长的那排错误没了但是下面的还在)咨询一下怎么弄

可以看一下我的博客,里面有一篇文章写了

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7406662
  • 除此之外, 这篇博客: 买了云服务器不会用?写了网站不会部署?超详细springboot+vue前后端项目部署教程来啦中的 3、刷新报错 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这样部署以后,虽然可以通过公网IP:8080进行访问,但是我们会发现点击刷新以后,会出现404NotFound错误。

    在webapp里面的项目所在统计目录下,新建一个WEB-INF文件夹,添加web.xml文件,在里面添加内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                          http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1" metadata-complete="true">
        <display-name>Router for Tomcat</display-name>
        <error-page>
            <error-code>404</error-code>
            <location>/index.html</location>
        </error-page>
    </web-app>
    

    在这里插入图片描述

    这样访问页面时进行刷新就不会404 Not Found啦!

首先,我看你请求的是localhost:8080,这个应该是你vue的请求地址有问题

    vue项目一般有两种运行方案
    1.采用npm运行,这种你需要修改你的请求代理地址,一般是在vue.config.js里面
    2.采用nginx做反向代理,我看你是前后端分析,部署的话最好采用nginx做代理,那么可能是你nginx代理配置文件有点问题

其次,你的跨域问题,如果是用nginx代理的话,可以在nginx里面解决,也可以在后端解决

    nginx采用location ^~/api/ {
      rewrite ^/api/(.*) /$1 break;
      proxy_pass http://localhost:3000;
    }形式来转发请求,
try_files $uri $uri/ /index.html;有可能解决地址需要添加.html后缀或者路由报错404
java
/**
     * 跨域配置
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 设置访问源地址
        config.addAllowedOriginPattern("*");
        // 设置访问源请求头
        config.addAllowedHeader("*");
        // 设置访问源请求方法
        config.addAllowedMethod("*");
        // 有效期 1800秒
        config.setMaxAge(1800L);
        // 添加映射路径,拦截一切请求
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        // 返回新的CorsFilter
        return new CorsFilter(source);
    }

主要问题还是看你的vue是怎么部署怎么运行的,可以回复你的运行方式再继续分析