前后端分离搭建的简单实现

article/2025/10/5 16:44:00

前言

本片博客描述欠缺,如果有细心的小伙伴有什么地方看不懂或者感觉写的有问题之处,请留言我,我会根据留言内容更改


搭建前后端分离

为什么要前后端分离

前后端分离是目前非常流行的一种开发模式,他的项目分工更加明确:
后段:负责处理,存储数据
前段:负责显示数据
前段和后端开发人员通过接口进行数据交换
好处:
1.一套后端接口为所有UAN提供数据(PC端,APP端,桌面端等)
2.前,后端代码彼此独立互不影响
坏处:
1.当接口改变的时候,非常麻烦
2.需要前后端人员联 – 联调的开发时间(开发 + 测试 + 联调)占项目的15% - 60%

在进行前后端分离的时候,需要注意一个非常重要的问题:跨域问题

跨域问题

什么是跨域?

跨域是指跨域名的访问,以下情况都属于跨域:

跨域原因说明示例
域名不同www.jd.comwww.taobao.com
域名相同,端口不同www.jd.com:8080www.jd.com:8081
二级域名不同/子域名不同item.jd.commiaosha.jd.com
协议不同http://jd.comhttps://jd.com
域名和ip地址http://jd.com192.168.23.12

如果域名和端口都相同,但是请求路径不同,不属于跨域,如:

www.jd.com/item

www.jd.com/goods

跨域引起的原因?为什么会引起跨域?

1.浏览器的同源策略引起跨域问题
2.跨域不一定引起跨域问题
跨域没有引起了问题:

11.3.跨域的三种解决方案:

1.Jsonp
最早的解决方案,利用script标签(不受限)可以跨域的原理实现
限制:
需要服务的支持
只能发起GET请求
2.nginx反向代理
思路是:利用nginx反向代理把跨域为不跨域,支持各种请求方式
3.CORS
规范化的跨域请求解决方案,安全可靠(w3c组织的标准)
优势:
在服务端进行控制是否允许跨域,可自定义规则
支持各种请求方式:GET POST PUT DELETE
限制访问的电脑的IP地址
缺点:
会产生额外的请求(可能发一次/二次请求)理解:
我们会采用nginx搭建静态页面服务器+cors的跨域方案

12.CORS解决跨域

12.1.什么是CORS

CORS是一个W3C标准,全称是:跨域资源共享,它允许浏览器想跨源服务器发出XML HttpRequest请求,从而克服了AJAX只能同源使用的限制
CORS需要浏览器和服务器同时支持,目前所有的浏览器都支持该功能(IE浏览器不能低于IE10)
浏览器端:
目前所有的浏览器都支持(除了IE10以下不能)整个CORS通信过程,都是浏览器自动完成,不需要用户参与
服务器端:
CROS通信与AJAX没有任何差别,因此不需要改变以前的业务逻辑,只不过,浏览器会在请求头中携带一些头的信息,我们需要以此判断是否允许其跨域,然后在响应头中加入一些信息即可(这一般过滤器完成功能)

12.2.CORS原理(过于复杂,简单的介绍)

浏览器会将ajax请求分为两类,其处理方案略有不差异:请求简单,特殊请求

简单请求:

只能是head、get、post请求
头信息不超过5种数据
只需要发送一次请求

特殊请求:

发送一次或者两次请求
put、delete等请求
第一次请求是预检请求,判断服务器是否会处理该请求,第二次请求是预检通过之后,向服务器发送真正的请求

解决跨域问题对前后端分离的简单实现

先看一张图,两个开发工具,分别是开发前端和后端的在这里插入图片描述

我要实现的需求:

项目前后端分离,浏览器访问前段页面,前端页面通过vue请求后端数据,并将数据回显到页面上

步骤:

1.在项目中添加config目录将SpringMVC已经帮我们写好了CORS的跨域过滤器导入到config目录中

2.将静态页面部署到nginx服务器上

我的项目目录:

在这里插入图片描述

GlobalCorsConfig 配置文件

package com.czxy.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;@Configuration
public class GlobalCorsConfig {@Beanpublic CorsFilter corsFilter() {//1.添加CORS配置信息CorsConfiguration config = new CorsConfiguration();//1) 允许的域,不要写*,否则cookie就无法使用了//TODO 要修改此处 允许访问的域(前段页面会通过这个域访问后端)config.addAllowedOrigin("http://localhost:8082");//2) 是否发送Cookie信息config.setAllowCredentials(true);//3) 允许的请求方式config.addAllowedMethod("OPTIONS");config.addAllowedMethod("HEAD");config.addAllowedMethod("GET");config.addAllowedMethod("PUT");config.addAllowedMethod("POST");config.addAllowedMethod("DELETE");config.addAllowedMethod("PATCH");// 4)允许的头信息config.addAllowedHeader("*");//2.添加映射路径,我们拦截一切请求UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();configSource.registerCorsConfiguration("/**", config);//3.返回新的CorsFilter.return new CorsFilter(configSource);}
}

将页面部署到Nginx服务器上(Mac 终端配置,Windows可以之间找到Nginx的配置文件打开配置)

注意:我后端接口的指定端口为8080,在前端通过axios发送ajax请求,请求数据的是要在被请求请求的接口前加上http://localhsot:8080/

在这里插入图片描述

通过vi /usr/local/etc/nginx/nginx.conf命令进入到nginx的配置文件,在nginx的配置文件中配置访问页面的端口号,和前端在本地电脑的路径

如下所示:
在这里插入图片描述

注意进入配置文件后
配置内容编写在http{}中

在这里插入图片描述
在这里插入图片描述
配置内容:

server {listen        访问页面的端口号(要与后端配置访问端口一致);server_name   localhost; #通过什么方式访问location ~/.*\(html|htm|js|css)$ { #允许访问的文件类型(比如页面是.html的,vue.js是js......)root 前端页面的路径;}
}

配置好了 点击esc :wq 保存并退出

重启Nginx服务 sudo brew services restart nginx

在这里插入图片描述

测试

启动SpringBoot启动类

根据在nginx.conf配置类中配置的端口访问页面
我配置的是8082,访问方式为localhost,那我访问页面的格式为:
localhost:8082/页面.html

在这里插入图片描述
测试结果:前端成功请求到了后端数据,搭建成功


http://chatgpt.dhexx.cn/article/rA6lLJvx.shtml

相关文章

前后端分离开发架构

前后端分离开发架构设计 一、为什么要使用前后端分离 1.理解 MVC MVC是一种经典的设计模式,Model-View-Controller,即模型-视图-控制器。M主要负责数据与模型,V主要负责显示,C主要负责交互与业务 模型是用于封装数据的载体&#…

前后端分离php还有优势,前后端分离优缺点

前后端分离优缺点 之前有朋友问我:什么是前后端分离。他说北度搜到的都是大篇幅文章,看完还是很懵。 这里我简单总结下,如果有疏漏和不对的地方还请路过的网友指出。 一、先用一张图来解释 二、为什么要前后端分离(优点) 1. 全端适应 PC、APP…

前后端分离的登录

目录 一、跨域认证的问题 ​编辑 1.2 什么是JWT 1.3 JWT原理 1.4 JWT结构 1.4.1 Header 1.4.2 Payload 1.4.3 Signature 1.5 使用JWT---JAVA 1.5.1 引入依赖 1.5.2 封装一个JWT工具类 二、完成前后端分离的登录功能 2.1 前端代码 2.2 配置拦截器axios 2.3 后台拦截器 一、…

前后端分离架构

原文 参考: 到底什么是前后端分离1 到底什么是前后端分离2 到底什么是前后端分离3 前后端分离是个架构设计问题。所谓架构设计,实际上是如何合理的对现实的人力架构进行系统映射,以便最大限度的提高整个公司的运行效率。 前后端的定义 前后…

前后端分离的跨域问题

跨域问题原因 在现在流行的前后端分离开发中,跨域问题突显了出来,跨域问题的根本原因:浏览器有同源策略限制,当前域名的js只能读取同域下的窗口属性,这是一个基础安全功能。那么什么是同源策略呢?即两资源的…

前后端分离历史

文章目录 前后端分离前后端分离的历史前后端合并前后端耦合前后端“分离”大厂的方案前后端分离的理想方式前后端分离的好处前后端分离的挑战总结 前端历史前端开发的历史和趋势什么是前端前后端不分的时代后端 MVC 的开发模式前端工程师的角色典型的 PHP 模板AjaxWeb 2.0前端 …

小谈什么是前后端分离?

什么是前后端分离? 学习目标 什么是前后端分离?前后端分离初了解为什么要前后端分离?1、前后职责分离2、前后技术分离3、前后分离带来了用户用户体验和业务处理解耦4、前后分离,可以分别归约两端的设计 前后分离架构接口设计 用户…

java 前后端分离_Java项目如何实现前后端分离

Java项目如何实现前后端分离 发布时间:2020-11-20 15:55:52 来源:亿速云 阅读:103 作者:Leah 今天就跟大家聊聊有关Java项目如何实现前后端分离,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 构建springboot…

java 前后端分离

前后端分离的开发模式,这两年确实被炒得如火如荼,导致这个话题也成了面试极其爱问的一个问题,尤其是换工作、跳槽,之前不管你是做后端,还是前端,都可能会涉及。 面试官常问: 诶?你…

前后端ajax分离如何做seo,前后端分离 seo

目录 一、bootstrap 前后端分离 表现层完全由前端掌控是最好的。所以掌握jsp和jstl是挺好的,等你全掌握之后麻利得把页面模板搞定就可以嘲笑后端都是bottleneck了。 当然不愿意用jsp/jstl之类的,也可以考虑完全用ajax。 为什么说前后端分离不利于seo的原…

前后端分离

一、项目有前后端分离和前后端不分离: 在前后端不分离架构中,所有的静态资源和业务代码统一部署在同一台服务器上。服务器接收到浏览器的请求后,进行处理得到数据,然后将数据填充到静态页面中,最终返回给浏览器。 实现…

Spring Security 前后端分离

前后端分离概述 前后端分离指的就是前后端分离部署,前端 调用后端API,后端 返回 JSON格式数据,页面是由前端渲染并展示到浏览器中。 相比较传统的单体项目 ,页面是由后端渲染完成后返回给浏览器的。(jsp、thymeleaf、…

实现前后端分离

对目前的web来说,前后端分离已经变得越来越流行了,越来越多的企业/网站都开始往这个方向靠拢。那么,为什么要选择前后端分离呢?前后端分离对实际开发有什么好处呢? 为什么选择前后端分离 1. 在以前传统的网站开发中&#xff0c…

何为前后端分离?一文搞懂前后端分离发展史

目录 一、前言 二、前后端分离的演进过程 2.1 发展的三个阶段 2.2 前后端不分离阶段(Java的JSP作为前端视图时代) 2.3 前后端半分离阶段(前后端使用Ajax交互的半分离时代) 2.4 前后端完全分离阶段(前后端使…

前后端分离架构概述

1、背景 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginxtomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户…

前后端分离架构,超全面详解~

此文通俗易懂,全面讲解前后端分离架构核心思想与作用,对学习微服务、开发企业项目大有裨益,建议收藏细品,好好领悟!~ 一、简介 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginxtomcat的方式&a…

到底什么是前后端分离

1、到底什么是前后端分离? 前后端分离的"前"特指浏览器端(或客户端),直接呈现给用户的;后端是服务器端,处理业务逻辑和数据,不呈现给用户。 Java服务器端初学者最容易引起误解的一个概念就是:J…

c语言 链表基本操作

对于c语言的单链表来说,应该是数据结构中比较简单的一类结构,我们只要认识链表结构,对指针和结构体掌握好,其实编写代码并不算太难。 链表结构: 对于链表中的每一个结点,我们可以定义如下的结构体&#xf…

C语言——反转链表

大家好,本人第一次发布博客,目前正在学习数据结构,写博客的目的是一是想分享自己的学习过程,二也是每次写完代码后进行总结。希望大家一起共同学习! 现在我正在看《大话数据结构》这本书,每次学习过后我都会…

C语言数据结构之链表

前面的文章我们就一直说,学一个新东西之前一定要弄明白它的作用是什么,我们为什么要用它。之前讲C语言时我们讲到数组,数组的实质是一种顺序储存、随机访问、存储单元连续的线性表,既然存储单元连续,那么对其进行插入和…