声明

在以往的开发中,前后端分离也不是像现在这么热门,所谓的前端工程师也只不过是写好静态页面由Java工程师或者php工程师嵌入到页面中进行开发,这或许加重了这些工程师的工作量,而且在样式调试上由纯html代码到jsp,asp,php调试起来要两个工程师一起商量着找问题,解决起来成本也很高。前后端分离,前端工程师不仅仅要负责展现,而且要编写相应的代码使得dom渲染,网络交互都focus在前端工程师这里。这样服务器端工程师则更加有精力来维护代码的逻辑性,事务性,性能等。是啊,技术框架百花齐放的今天,前端也要mvc了。angular,vue等。下面我将自身实践简述如何解决跨域问题

跨域问题简述(引用网络上比较清晰的阐述表格)

第一种解决方案jsonp(不推荐使用)

这种方案其实我是不赞同的,第一,在编码上jsonp会单独因为回调的关系,在传入传出还有定义回调函数上都会有编码的”不整洁”.简单阐述jsonp能够跨域是因为javascript的script标签,通过服务器返回script标签的code,使得该代码绕过浏览器跨域的限制。并且在客户端页面按照格式定义了回调函数,使得script标签返回实现调用

第二种方案,反向代理(推荐使用)

代理访问其实在实际应用中有很多场景,在跨域中应用的原理做法为:通过反向代理服务器监听同端口,同域名的访问,不同路径映射到不同的地址,比如,在nginx服务器中,监听同一个域名和端口,不同路径转发到客户端和服务器,把不同端口和域名的限制通过反向代理,来解决跨域的问题,案例如下:

server {listen       80;server_name  domain.com;#charset koi8-r;#access_log  logs/host.access.log  main;location /client { #访问客户端路径proxy_pass http://localhost:81;proxy_redirect default;}location /apis { #访问服务器路径rewrite  ^/apis/(.*)$ /$1 break;proxy_pass   http://localhost:82;}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

第三种方案在server设置header

通过设置server的header来设置浏览器对于服务器跨域的限制,具体实现如下:

//统一过滤器设置
public class DomainFilter  implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");chain.doFilter(req, res);}@Overridepublic void destroy() {}
}//spring boot过滤器设置@Beanpublic FilterRegistrationBean filterRegistrationBean() {FilterRegistrationBean registrationBean = new FilterRegistrationBean();DomainFilter domainFilter = new DomainFilter();registrationBean.setFilter(domainFilter);List<String> urlPatterns = new ArrayList<String>();urlPatterns.add("/*");registrationBean.setUrlPatterns(urlPatterns);return registrationBean;}
  • 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
  • 32
  • 33
  • 34
  • 35
                 <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7b4cdcb592.css" rel="stylesheet"></div>

前后端分离的跨域解决方案相关推荐

  1. 解决java前后端分离端口跨域问题

    解决java前后端分离端口跨域问题 参考文章: (1)解决java前后端分离端口跨域问题 (2)https://www.cnblogs.com/mollie-x/p/10449686.html 备忘一 ...

  2. Vue flask前后端分离解决跨域

    Vue flask前后端分离解决跨域 安装axios 在项目目录下输入:npm install axios--save-dev 配置axios 在main.js中引入axios import axio ...

  3. Vue+Flask前后端分离 Vue3跨域配置

    Vue+Flask前后端分离 Vue3跨域配置 前端端口号为8080 后端端口号为5000 问题描述 问题解决 接口路径映射 前端端口号为8080 后端端口号为5000 后端端口API 代码片. @a ...

  4. 前后端分离与跨域的解决方案(CORS的原理)

    前后端分离 前后端分离的好处 最大的好处就是前端JS可以做很大部分的数据处理工作,对服务器的压力减小到最小. 后台错误不会直接反映到前台,错误接秒较为友好. 由于后台是很难去探知前台页面的分布情况,而 ...

  5. 前后端分离项目跨域问题及解决方案

    目录 1.什么是跨域 2.前后端分离项目中的跨域问题 3.方法一:SpringBoot后端进行处理 4.方法二:在Vue前端进行处理 5.总结 1.什么是跨域 请求同域资源: 在域名 (或 ip 地址 ...

  6. Spring Boot2.x-13前后端分离的跨域问题解决方法之Nginx

    文章目录 概述 浏览器同源策略 后台搭建 pom.xml interceptor 配置 Controller 启动测试 浏览器和session 后端工程发布到服务器上 问题复现 通过Nginx反向代理 ...

  7. 06-若依前后端分离项目跨域问题解决方式

    什么是跨域 跨域就是前后端分离项目前端无法把session等信息传递给后端服务器.跨域源自浏览器同源策略.同源策略是一种约定,同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互. ...

  8. 跨域详解!前后端分离解决跨域问题

    文章目录 一.为什么会出现跨域问题 二.什么是跨域 三.非同源限制 四.跨域问题的解决方式 Jsonp前后端配合 前端修改 后端修改 CORS 详解响应头 5. SpringBoot解决 [方式一]全 ...

  9. Day15(Js入门、jquery入门、ajax入门、前后端分离开发跨域问题、linux环境准备、jdk_tomcat环境搭建、docker介绍及应用(docker安装、基本命令、安装tomcat))

    js入门 js代码辅助 window–>preferences–>javaScript–>Content Assist .abcdefghijklmnopqrstuvwxyz alt ...

最新文章

  1. WinForm应用只运行一次
  2. 怎么用金蝶记kis账王查询账簿
  3. android11beta支持什么手机,Android 11 Beta1发布,新增多种功能,网友:Android基于 Flyme...
  4. 【原创】RMQ - ST算法详解
  5. 游戏“外挂”?—— AI生成游戏最强攻略
  6. 赛锐信息:SAP ABAP 模块化
  7. 记录——《C Primer Plus (第五版)》第七章编程练习第十一题
  8. 设置hash后导致的返回问题的解决方案
  9. ASP.NET 防止F5刷新页面按钮重复提交
  10. [导入]ASP.NET 2.0数据处理之高级分页/排序
  11. python爬关键词百度指数_Python爬虫爬取百度指数的关键词搜索指数教程
  12. BlazeDS知识积累
  13. slam和orbslam3环境配置
  14. Redux开发实用教程
  15. 蓝桥杯 算法提高 盾神与积木游戏
  16. 怎么把PPT幻灯片里背景图片拿出来
  17. 【GCC】gcc警告选项汇总--编辑中|gcc编译选项
  18. 危与机并存 保险业如何走好线上线下业务并举转型之路?
  19. 个人日记-学习究竟是什么读后感4-2020/7/19
  20. 第一章:pycharm、anaconda、opencv、pytorch、tensorflow、paddlex等环境配置大全总结【图像处理py版本】

热门文章

  1. Python入门100题 | 第053题
  2. 结构主题模型(一)stm包工作流
  3. Docker源码分析(六):Docker Daemon网络
  4. 基于用户画像大数据的电商防刷架构
  5. tomcat:there is no resources that can be added or removed from server
  6. Spring Mvc返回html页面404错误解决记录--转载
  7. codereview介绍
  8. 启动weblogic的错误:Could not obtain an exclusive lock to the embedded LDAP data files directory...
  9. MySQL——外部数据的批量导入
  10. 【数据处理】python数据评估常用指标:ks、fpr、tpr