欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-18 17:08:50
...

前言

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


搭建前后端分离

为什么要前后端分离

前后端分离是目前非常流行的一种开发模式,他的项目分工更加明确:
后段:负责处理,存储数据
前段:负责显示数据
前段和后端开发人员通过接口进行数据交换
好处:
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 {
    @Bean
    public 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

前后端分离搭建的简单实现
测试结果:前端成功请求到了后端数据,搭建成功

相关标签: 前后端分离