理解跨域问题,前后端分离中,在springboot后端解决跨域问题

前后端分离项目跨域问题及解决方案 目录 1、什么是跨域 2、前后端分离项目中的跨域问题 3、方法一:SpringBoot后端进行处理 4、方法二:在Vue前端进行处理 5、总结 1、什么是跨域 请求同域资源: 在域名 (或 ip 地址)相同,端口号相同下的请求资源,可以看做是同域资源 请求跨域资源: 请求的资源只要 是 域名(或 ip 地址)、端口号中任意一个不同的资源都可以认为是跨域资源 如: 端口... 阅读详情

一:什么是跨域问题

源于JavaScript的同源策略。即只有 协议+主机名+端口号全部相同,才允许相互访问。如果其中有一个不同,正常情况下浏览器就会把收到的报文丢弃,然后报一个cors policy的错误。

二:出现情况(前后端分离开发vue+springboot)

我在本地用nginx服务器挂了一个端口127.0.0.1:10086 用来提供 静态页面;
而静态页面中需要用ajax请求127.0.0.1:8080的后端接口获取数据。
  • 前端请求
 axios.post("http://127.0.0.1:8080/test/hello").then(function(response){
		console.log(response);
	},function(error){
        console.log(error);
    })
  • 后端响应
@PostMapping("/test/hello")
public  AjaxResponse testhello(){
    log.info("hello");
    return "hello";
}

  • 当前端页面按钮触发ajax请求后,会有cors policy的报错。

三:报错原因

  1. 首先明确,这个页面发起的ajax请求是被我的后端请求给接受到了的,进入了Controller里面处理了逻辑业务;而且最后服务器是把Response响应给返回了!
  2. 那么为什么还会报错呢?!原因在于cors policy同域策略,通俗地讲就是浏览器在接受到这个Response的时候才反应过来,这个Response如果浏览器他接收的话他就是违规的,所以浏览器选择遵守规定放弃了这个Response体,并弹出cors policy错误警告。

四:解决跨域问题(springboot后端解决)

  1. 要解决这个问题也很简单,只需要告诉浏览器“这个报文你接受吧,我同意你不遵守cors规则”就行了。这样浏览器就不会扔掉数据报错了。

  2. 如何告诉浏览器呢?!这时候我们需要在Response报文中加一个响应头Header信息,也就是Access-Control-Allow-Origin:【被允许跨域访问的源】;

在这里插入图片描述

  1. 在springboot有几种处理的方法,但要知道所有方法的最后其实都是给Response加上了一个Header信息,告诉浏览器不要扔掉信息,都是这个原理。
  • 方法一: 用httpServletResponse封装好的类直接给返回头加上这个信息(此方法用于理解…)。

    @PostMapping("/hello")
        public  AjaxResponse testhello(HttpServletResponse response){
            response.setHeader("Access-Control-Allow-Origin","http://127.0.0.1:10086");
            log.info("hello");
            return AjaxResponse.success("hello");
    }
    
  • 方法二:实现WebMvcConfigurer接口,然后重写addCorsMappings(CorsRegistry registry)方法。

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
       @Override
        public void addCorsMappings(CorsRegistry registry) {
            String mapping = "/**"; // 所有请求,也可配置成特定请求,如/api/**
            String origins = "http://localhost:10086"; // * 表示所有来源,也可以配置成特定的来源才允许跨域,如http://www.xxxx.com
            String methods = "*"; // 所有方法,GET、POST、PUT等
            Boolean allowCredentials = true; // 表示是否允许携带cookie  //解决Session问题
            long maxAge =30 * 1000; //表示探测请求通过后,保持认证的时间。 //这个探测请求是针对复杂请求设计的,最后面说明
            registry
                .addMapping(mapping)
                .allowedOrigins(origins)
                .allowedMethods(methods)
    //          .allowCredentials(true)
    //          .maxAge(maxAge)
            ;
        }  
    }
    

    实际上只是针对跨域问题,只需要配置好mapping origins 和methods三个参数就好了,配置好了以后再次用前端向后端发起跨域请求,就会发现不再报错了。

    这个方法二有个弊端,就是如果你还配置了拦截器,那么就会产生冲突。最后面记录我的填坑过程。

  • 方法三:

    实现Filter接口重写doFilter方法,过滤器中添加头部

@WebFilter(filterName = "MyFilter",urlPatterns = "/*")
public class CorsFilterConfig implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
        //指定允许其他域名访问
        httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
		
		//前端携带cookie时,也就是写了 {withCredentials: true},后端不能用通配符,
        //得用"Access-Control-Allow-Origin",httpServletRequest.getHeader("origin")
        
            //响应头设置
        httpServletResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

        //允许携带cookie
        httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");

        //响应类型
        httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");

        //option验证后时间
        httpServletResponse.setHeader("Access-Control-Max-Age", "3600");

        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

五:解决Session维护问题:

5.1用方法二(重写方法)解决:
  1. 假设,当我们用方法二重写addCorsMappings(CorsRegistry registry)后,能够跨域请求了。

    会出现一个问题。那就是ajax的请求是不会自动携带cookie的,意味着后端无法凭借前端cookie记录的JSessionId来获取后端存储的Session。

    通俗讲就是每一次ajax请求后端都会视作为不同的用户,每次都会给这个ajax请求的Response消息头里设置一个新的“Set-Cookie:JSESSIONID=44AA8F3EFF388BD7ADE0551BC33FADB”。

  2. 如何解决?很简单,让前端页面发起ajax请求的时候让它带上所有cookie不就好了!同时我们返回的Response里面需要加上一个头信息"Access-Control-Allow-Credentials:true"。

在这里插入图片描述

  • 具体步骤如下

  • 第一步让前端的ajax部分加上withCredentials: true这个参数,保证前端会带上cookie。

    比如我这里用的axios就这样写

   axios.post("http://127.0.0.1:8080/test/hello", {withCredentials: true}).then(function(response){
   		console.log(response);
   	},function(error){
           console.log(error);
       })

或者用Jquery封装的ajax这样加

   $.ajax({
               url: "http://localhost:8080/orders",
               type: "GET",
               xhrFields: {
                   withCredentials: true
               },
               success: function (data) {
                   render(data);
               }
    })
  • 第二步,在后端addCorsMappings(CorsRegistry registry)方法里添加 allowCredentials(true)。

    (注意,前端授权了cookie发送,也就是配置了withCredentials: true,那么后端allowedOrigins(origins)这个参数origins就不能写 * 匹配所有,而且allowCredentials(allowCredentials)必须是true。)

    我理解意思就是前端把cookie全带过来了,后端得指定要求需要的一个域里面的cookie,毕竟不能全要。

     @Configuration
     public class WebMvcConfig implements WebMvcConfigurer {
        @Override
         public void addCorsMappings(CorsRegistry registry) {
             String mapping = "/**"; 
             String origins = "http://localhost:10086"; //写成String origins = "*"; 错误,这时候需要指定明确的域
             String methods = "*"; 
             Boolean allowCredentials = true; // 表示是否允许携带cookie  //解决Session问题
             registry
                 .addMapping(mapping)
                 .allowedOrigins(origins)
                 .allowedMethods(methods)
                 .allowCredentials(allowCredentials)
             ;
         }  
     }

这样你会发现session就被同步了,每次Ajax的请求的Response都不会被重新赋值新的JSessionId了。用Session记录登陆信息也可以实现了。

5.2用方法三(filter)解决:

同方法二介绍的一样

  1. 用Filter进行实现跨域并维护session,前端同样要在发送请求的时候添加{withCredentials: true}参数,
  2. 后端的filter中也要在response中添加头部信息 httpServletResponse.setHeader(“Access-Control-Allow-Credentials”, “true”)。

六:所谓的addCorsMappings与拦截器冲突问题

  • 如果用第二种方法解决跨域和session维护问题,而且你后端还要配值拦截器,那么就有可能出现问题,就是很多网友说的冲突问题。
  • 如果在拦截器中抛出异常或者拦截器return了false,这个时候你会发现第二次的请求根本不允许发送。
  • 原因:重写addCorsMappings()来给Response添加Access-Control-Allow-Origin头部信息的操作也是在拦截器的某一步操作里做的,这就导致Option请求(Option请求下文有简单介绍)由于某种拦截原因在被拦截后由于不被放行,所以连同导致后面给添加Access-Control-Allow-Origin等头部信息的操作也没能执行。所以浏览器还是会遵守规则不接受你的报文。
  • 拦截原因:被拦截而不被放行的原因可能有是人为或非人为地在拦截器抛出异常;或者拦截器那里你的逻辑返回了false导致不放行(比如说下面介绍的,你的请求用的是复杂请求,而又没对复杂请求中的option方法设计好逻辑,导致不被放行)。
  • 解决方法:换方法三,重写filter方法。filter优先于拦截器,这样添加跨域的头部和拦截器就不会搅和在一起了。就算你拦截器逻辑中不被放行,但我回复的报文已经提前加上相关头部信息了。(这种情况仍然解决不了option请求的问题,仍需要额外处理)

七:拦截器中对option请求的处理。

7.1 首先要了解option请求。

  • options请求又叫做预检请求(我选用json格式导致请求变成了需要先发送预检请求的复杂请求),在真正的请求发送出去之前,浏览器会先发送一个options请求向服务询问此接口是否允许我访问。也就是说,你的数据请求实际上浏览器发送了两个请求。第一次是preflight,也就是options请求,用于请求验证, 第二次才是我真正需要发送的Post请求。只有第一个OPTION正常返回了,第二次请求才会正常发送。

  • 预检请求的头信息参数含义。

    在还没有配置拦截器的情况下用方法二或者方法三解决跨域问题和session维护问题后,预检请求有下列正常参数。

  • 预检请求发出Request头部信息中有两个参数:

    Access-Control-Request-Headers: content-type  //告知服务器,实际请求携带自定义请求首部字段Content-Type
    Access-Control-Request-Method: POST  //告知服务器,实际请求将使用 POST 方法
    
  • 预检请求返回的Response头信息中的重要参数:

    Access-Control-Allow-Origin: http://localhost:10086  //表明服务器允许跨域,允许的域是http://localhost:10086
    Access-Control-Allow-Methods: POST, GET, OPTIONS  // 表明服务器允许客户端使用 POST,GET 和 OPTIONS 方法发起请求
    Access-Control-Allow-Headers: Content-Type  // 表明服务器允许请求中携带字段Content-Type
    Access-Control-Max-Age: 1800  //这个预检请求认证通过的有效期为1800秒,在有效时间内,浏览器无须为同一请求再次发起预检请求,请注意,浏览器自身维护了一个最大有效时间
    
  • 在没有配置拦截器的情况下,一切都正常有序。

7.2 你的拦截器或filter的逻辑极大概率不会放行OPTION请求,导致异常。

  • 配置了拦截器就意味着必然会拦截到第一次的option请求。因为option请求是不会携带参数信息,例如cookie,token那些个,数据处理可能就出现问题。所以这个时候你的逻辑没有对option进行特殊处理的话,就有极大可能不放行此次option请求。
  • 这里无论是用addCorsMappings(CorsRegistry registry) 还是用filter来处理上述的session维护问题和跨域问题,都可能会因为option请求导致异常。但是异常出现的原因是不一致的。
  1. 用addCorsMappings(CorsRegistry registry)解决跨域和session问题,然后配置了拦截器阻拦了option请求。这个时候,是因为OPTION请求没加上跨域头部信息,所以你会发现第二次的请求根本不允许发送。这次是浏览器根本不允许发出去,不同于最开始讨论的等到服务器返回了浏览器才扔掉。
    检查option请求返回的Response体,发现添加的允许跨域的几个头部信息没有被添加上。
    在这里插入图片描述
  2. 用filter处理session和跨域问了后,拦截OPTION请求,同样第二次的正真请求同样也不被允许发送出去。原因是OPTION没有正确的状态码,本来也是这样,OPTION不被放行,而第二次请求必然不会发送(不同的是,这里跨域问题是解决的了)。
    前端报错如下,没有正确的status。在这里插入图片描述
  • 通用的解决方法:无论怎么样拦截器或者filter都放行option请求。
    比如我配置的拦截器:
public class Login_Interceptor implements HandlerInterceptor {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
      if(request.getMethod().equals("OPTIONS")){
          log.info("OPTIONS直接放行");
          return true;
      }
      HttpSession session = request.getSession();
      Object userInfo = session.getAttribute("userInfo");
      if (userInfo==null) {
          log.info("被拦截++,:session.getId()ID为:"+session.getId());
          return false;
      }else {
          log.info("被放行++,:session.getId()ID为:"+session.getId());
          return true;
      }
  }
}

七:总结:

  • springboot后端处理跨域问题有两个主要方法:
  1. 重写addCorsMappings(CorsRegistry registry)
  2. 实现Filter接口重写doFilter方法
  • 如果还需要用拦截器来实现一些业务逻辑,比如我在拦截器里面用session判断是否登陆,而且还要手动抛出异常的话。那么最好用实现Filter接口重写doFilter()的方法。
  • 如果你的请求中包含还复杂请求,那么最好还要针对option请求进行放行操作。原因已经在上面记录了。
  • 全剧终,希望对你我有帮助。
前后端分离:SpringBoot + Jwt 登录验证token 前后端分离:SpringBoot + Jwt 登录验证token 写在前面:近期在做一个前后台分离的项目 Springboot + vue 登录验证的时候选用了shiro 因为是拿来即用的 所以前后端部署完成后出现很多bug...   种种原因 最后选择了友好又亲切的Jwt  : ) 好了 直接上代码了 wait 粗暴上代码之前让我先小小说下这个小模块是什么原理 (毕竟鱼的记忆力) 以我的... 阅读详情

相关推荐

5.44GHz超高精度!STM32G474的HRTIM时钟配置避坑指南

本文深入解析STM32G474内置高分辨率定时器的时钟配置要点,帮助工程师避开常见陷阱。文章详细阐述了从系统时钟到5.44GHz等效时基的路径,重点分析了预分频器乘法器、周期计算溢出、影子寄存器同步等关键配置,并结合实测波形对比,确保HRTIM在电机控制、数字电源等精密应用中发挥极限性能。

book8的博客 522

关于请求参数

java前后端分离中关于请求参数 requestparam用于普通的请求参数,从客户端发来请求,如分页的页码和分页大小,vue中需要在js中声明param数组传入请求参数, 而requestbody请求体一般用于复杂格式参数的请求,并且需要在post请求中才能用这个注解,因为get请求没有请求体,会丢失请求体,并且浏览器以json的格式返回给服务器,需要在vue请求js中声明data:来存放请求体,如页面有查询功能,是一个表单,需要提交给后台,就要用请求体,并且后台写一个vo类,装载这个表单的数据,字段是查

qq_40479014的博客 367

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

Nginx在前后端分离项目中的配置

本文简要介绍Nginx在前后端分离项目中的使用。

u800820的专栏 4885

ABtest描述统计功效

我们在面试数据分析时,常常会问到如何确定样本量的问题,会有一个指标:统计功效(power),或者是1-β 统计功效会影响实验的可信度,甚至会影响实验所需的样本量,要了解统计功效,首先要理解两类统计错误 假如我们做了一个AB实验,且两组用户的数据均值为μ1和μ2,我们会有两个初始假设: H0:两个实验组的数据没有差别(μ1=μ2),这个假设也叫“零假设”,也叫原假设 H1:两个实验组之间的数据存在差别(μ1≠μ2),这个假设也叫“非零假设”,也叫备择假设 定义两类错误: 实验本身没有效应,但我们觉

qq_38134556的博客 898

Modbus 通信协议详解

Modbus是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给 IDA(,分布式自动化接口)组织,并成立了 Modbus-IDA 组织。

Projectsauron 的博客 7万+

关于前后端传参的几种方式

有些后端的小伙伴可能会因为接不到参数而苦恼,在方法运行的时候会造成空指针等异常,整理了一下集中接参的方式,废话不多说,直接上代码。

weixin_53451858的博客 2977

torch_npu 用法笔记

torch_npu 用法笔记

jacke121的专栏 1536

后端Springboot解决跨域问题

上代码!! import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class CrosConfig imp

m0_59159504的博客 427

LeRobot X-VLA:首个适用于任意机器人、任意任务的软提示机器人基础模型

X-VLA是一种基于软提示的视觉-语言-动作模型,通过可学习嵌入向量编码不同机器人配置,实现跨平台统一控制。该框架采用两阶段训练:先在29万次多平台任务中学习通用策略,再通过微调少量参数(仅1%)适配新机器人。实验表明,0.9B参数的X-VLA在6个仿真和3个真实平台上表现优异,如LIBERO任务达93%成功率,布料折叠任务100%完成。其核心创新是将硬件差异视为"任务",用软提示引导Transformer处理异构数据,为机器人基础模型提供可扩展方案。

2506_90492529的博客 1241

innovus:set_clock_latency与insertion_delay

当1ns clock latency设置在capture上,在report_timing报告中体现在other end arrival time以及capture clock path的Arrival Time上。因为-1ns的insertion delay存在,所以skew group报告中显示的Arrival (ns)是减1ns的结果,即1.819-1=0.819 ns。CTS阶段create_ccopt_clock_tree_spec之后,spec中会产生对应的insertion_delay命令。

m0_61544122的博客 1620

1. Springboot解决跨域问题(Cors)

一、什么是跨域访问 在前后端分离开发项目时,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出现。 二、跨域访问的解决方案有哪些? 2.1.第一类方案:前端解决方案 JS跨域 这里所说的JS跨域,指的是在处理跨域请求的过程中,技术面会偏浏览器端较多一些,一般是利用浏览器的一些特性进行hack处理,从而避开同源策略的限制。 JSONP 由于同源策略不会阻止动态脚本的插入到文档中去,所以催生出了一种很常用的跨域方式:JSONP(JSON with Padding)。 原理:浏览器对s

weixin_44869421的博客 579

【Altium designer】如何添加过孔阵列

按下图1指示,执行【Tool】菜单栏下【Via Stitching/Shielding】选项卡中的【Add Stitching to Net...】选项 图1 “添加过孔阵列”选项 点击【Add Stitching to Net...】选项后,会跳出一个窗口,让我们设置过孔阵列的参数信息,如下图2所示。 图2 过孔阵列参数设置 过孔阵列区域:勾选该选项框,即可绘制多边形区域; 过孔内径与焊盘直径:比如内径 【Hole Size】设为12mil,焊盘直径【Diameter】设为24mil; .

夜半少年的博客 2万+

cors 前后端分离跨域问题_前后端分离开发,Vue 如何处理跨域问题?

松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程Spring Boot + Vue 这一对技术栈目前看来可以说是非常的火热,关于 Spring Boot 松哥已经写过多篇教程,如:40 篇原创干货,带你进入 Spring Boot 殿堂!前后端分离的文章也写过好几篇了,例如:一个Java程序猿眼中的前后端...

weixin_36304806的博客 838

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

CORS解决浏览器跨域请求(同源策略)限制原理、后端springboot CROS跨域解决方案

源=协议+域名+端口号不看后面跟着的路径,如的源是http和https是两种连接协议服务器明确表示拒绝跨域请求或没有表示的,则校验不通过服务器表示允许跨域请求,则浏览器校验通过由于要求服务器在响应体添加相关字段来通过校验,所以服务器必须是自己人,比如无法向百度的接口发送跨域请求,因为人家不认识你,就无法在响应体头里配置源。

weixin_43281875的博客 1700

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

vue跨域丢失session php,解决前后端分离 vue+springboot 跨域 session+cookie失效问题

环境:前端 vue ip地址:192.168.1.205后端 springboot2.0 ip地址:192.168.1.217主要开发后端。问题:首先登陆成功时将用户存在session中,后续请求在将用户从session中取出检查。后续请求取出的用户都为null。解决过程:首先发现sessionid不一致,导致每一次都是新的会话,当然不可能存在用户了。然后发现cookie浏览器不能自动保存,服务器...

weixin_39883705的博客 607

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

前后端完全分离之后的跨域问题应该如何解决

记得刚刚进公司的时候遇到的第一个问题就是前后端完全分离,在apache服务器的页面要发请求给tomcat服务器的后端,那么后端要怎么处理才能让不同服务器的页面能发送请求过来? 根据上任留下来的笔记,这里面有两个版本。 第一种用于springboot,也就是java装配 import org.springframework.context.annotation.Bean; import org.sp...

qq_15015803的博客 796

一次跨域问题的解决经历(samesite)

1. 问题描述 生产和测试环境使用nginx做了反向代理,所以不存在跨域的问题,但是在本地研发环境,由于前后端分离,前端和后端在不同的电脑上开发,存在跨域问题。 前端使用的是vue,后端使用的是springboot。在前后端都做了跨域的设置,前端的设置为: //前端在vue的main文件全局添加一下代码: import axios from 'axios'; axios.defaults.withCredentials=true; 后端的设置为: import org.springframework.co

菜鸟成长笔记 3266

springboot学习笔记4( restful跨源资源共享,ajax跨域访问)

使用springboot restful 做前后端分离,跨域访问是比较头疼的问题。再解决跨域问题之前,先了解一下什么是同源,什么是跨源资源共享。 同源就是:请求协议一致,请求域名一致,请求端口。在一个浏览器,只能访问同一域名的资源,在当前域名资源中无法访问其他域名资源。例如: ...

177

Web项目前后端分离导致跨域问题的解决

在编写 SpringBoot 前后端分离项目时, 出现了一个问题: 前端无法得到后端响应的数据, 浏览器对请求进行了拦截 原因: 前端调用的后端接口和前端不属于同一个域, 就会产生跨域问题, 也就是说你的应用访问了该应用域名或端口之外的域名或端口 要同时满足三个条件才会产生跨域问题,这也就是为什么会产生跨域的原因。 浏览器限制,而不是服务端限制 请求地址的域名或端口和当前访问的域名或端口不一样 发送的是 XHR(XMLHttpRequest)请求,可以使用 a 标签(模拟xhr请求)和 img 标签(模拟

qq_45560445的博客 1655

shiro 前后端分离跨域问题

解决跨域问题,shiro springboot vue

多凡的博客 1269

Vue+SpringBoot健身房管理系统源码:从环境搭建到二次开发全指南

前后端分离架构已成为现代Web应用开发的主流模式,其核心在于将用户界面与业务逻辑解耦,通过API进行通信。这种架构模式提升了开发效率与团队协作能力,尤其适合中后台管理系统等应用场景。在技术实现上,Vue.js作为渐进式前端框架,负责构建交互式用户界面;SpringBoot则作为后端快速开发框架,提供RESTful API与数据持久化能力。理解这种架构的**代码结构**与**前后端联调**机制,对于掌握全栈开发至关重要。本文以健身房管理系统为例,详细拆解了基于Vue与SpringBoot的**前后端分离**项

weixin_30878501的博客 1613

Nginx-记录打通前后端

nginx

qk 569

使用 Nginx 部署前后端分离项目,解决跨域问题

前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了),然后群里就有小伙伴想让松哥来聊聊如何结合 Nginx 来部署前后端分离项目?今天我们就来聊一聊这个话题。 不得不说的跨域 很多人对前后端分离部署感到困惑,其实主要是困惑跨域问题怎么解决。因为前后端...

江南一点雨的专栏 1万+

前后端分离项目初体验——手把手教程+实例Demo

Web开发发展至今,前后端分离已经成为一种大趋势。今天我就以JavaWeb为示例来讲解一下前后端分离项目的构建、运行与开发。 示例项目的技术: 前端–Vue.js 后端–SpringBoot2.0 + SSM框架 使用Nginx解决请求转接与跨域问题 有关前后端分离的一些思考(此部分可略过) 首先我们需要理解一个东西:一个常见的项目被启动后,通常是占用一个特定的端口号的,比如说8080。而如果...

空夜's Blog 10万+
上一篇: 本地无法直接访问localhost:8080跳转到欢迎页index.html页面;报错javax.servlet.http.HttpServletRequest.getHttpServlet...
下一篇: spring控制反转IOC总结
wang__Ray
博客等级 码龄8年 59粉丝 17原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值