【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

前端 DEF 部署和 BUC 接入的“跨域”坑

  • 2021-03-10
  • 本文字数:1524 字

    阅读完需:约 5 分钟

前端DEF部署和BUC接入的“跨域”坑

背景

第一次尝试 react 框架,在本地调试前端 npm start,调用后端接口采用设置 host 127.0.0.1 local-fishci2.alibaba.net,前端代码配置如下可完美解决本地跨域问题。


null


因为是自建平台且只需要部署 daily 环境,通过 def 部署前端工程后,遇到了 HTTP 和 HTTPS 协议不匹配,因为 def 部署后是 https 的,而我的服务端工程部署在 daily 环境默认都是 http 的。一开始以为是协议问题,但也没打算部署到线上环境,那样成本太大。最后发现是因为跨域了。于是“坑”就由此开始了.....


null


截止目前还是有个巨坑,对一只好无前端专业功底的小菜鸡的我来说太难了,希望能有同学能帮忙答疑解决一下。

跨域遇到的坑

坑一:This request has been blocked:the content must be served over HTTPS.

问了开发,告诉我如果解决跨域也就自然解决该问题了,这样的 block 是浏览器行为,无法提供服务端设置 Access-Control-Allow-Origin 解决问题。


解决方案:把页面拷贝到后端工程。


一开始以为迁移那么多页面和资源任务非常繁重,最后发现不需要。因为 react pc 代码多为单页面应用,只需要拷贝以下代码放到后端的 template 的目录 index.html 里。


null


null

后台 Controller 加一个页面跳转即可:

null

坑二:跳转到的不是页面,是个字符串


null

于是尝试了加静态资源的路径配置:spring.resources.static-locations=classpath:/templates/,依然保持原样

null


再次尝试修改 addResourceHandlers 方法,依然没用


null

解决方案:需要增加这种 thymeleaf 模板类型的依赖,就能跳转到 index 页面了。


null


3、坑三:因为是服务端公用的,不想占用 index 路径,想前面增加一层目录/fyapp/,切换到已有的 FyAppController 类中增加了跳转,又变成“index”字符串了。

找了很多资料和原因,尝试了各种解决方案,一直怀疑是目录层级多了一层的关系,最终找到了一个巨坑:**@RestController 注解**


解决方案:去掉 @RestController 注解改成 @Controller


之前没注意到这个注解,因为接口返回 json 都使用习惯了,但是**@RestController 是 @ResponseBody 和 @Controller 的结合体。(坑二那边是因为新建的 Controller 没有使用这个注解)** ** 这下相当于页面和资源都融合在服务端代码里了,访问服务端的域名就顺利访问了!这样一通操作下来,前端还是可以用之前的 host 域名来调试,访问的是本地静态资源,服务端页面引用的是 cdn 上的资源,也没有太大关系。

BUC 接入再遇跨域问题

尝试接入了集团的 buc,这样一来再使用前端的 host 绑定域名就直接报错:


null


看接口返回应该是从 HTTPS 到 HTTP 发生了安全降级,尝试了很多方法都无解。


null


最后只能通过服务端的域名进行本地调试,但是服务端引用的是 cdn 上的资源,本地改了前端代码,不能生效,这对于本地调试来说是阻塞性的问题。


临时解决方案:


(1)在服务端判断域名,来路由本地或 cdn 上的资源


null


index.html 引用资源一定要加上“crossorigin”,即允许前端资源被跨域访问,否则 localhost 无法访问 local-fish2.alibaba.net。

(2)安装 chrome 插件:Switcheroo Redirector,配置 host 映射。(效果等同于(1))

遗留问题:

前端 react 工程是 lazy 懒加载机制打包的,这样可以减少上传时候的包体积,于是有些资源是动态生成不可控制,依然存在动态生成的静态资源如 8.css,8.js 路径是服务端域名,本地无法访问。


null

导致页面报错:

null

笨办法:

备份一个路由文件,本地调试的时候选用去掉懒加载的方案,上传到 def 进行部署时,切换回来。但是每次这样来回改文件名也非常痛苦。


null

感想

  • 没有真正意义上的“前后端分离”。要么就是资源和页面都在服务端,要不就是页面在服务端,资源在 cdn 上。

  • “跨域”无处不在。前端访问后端会遇到,后端调前端资源也会遇到,问题展现的形式真是多种多样啊~ 希望有牛人能帮忙指点或一起参与讨论。


本文转载自:闲鱼技术(ID:XYtech_Alibaba)

原文链接:前端DEF部署和BUC接入的“跨域”坑

2021-03-10 14:001821

评论 1 条评论

发布
用户头像
我们的解决方法是在前端用 nginx 转发
2021-03-11 00:25
回复
没有更多了
发现更多内容

item_get_pro-获得淘宝商品详情高级版api接口

技术冰糖葫芦

API 文档

为什么现在的低代码平台大多被抵制?

代码生成器研究

编程 程序员 低代码 代码

ClickHouse联合创始人、前Google副总裁Yury到访杭州玖章算术公司,双方建立生态合作

NineData

Clickhouse 数据复制 合作伙伴 SQL开发 NineData

MatrixOne 实战系列回顾 | 建模与多租户

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

后端除了增删改查还有什么?

秃头小帅oi

情感语音识别的研究方法与实践

来自四九城儿

SecureFX for Mac(ftp文件传输工具)附注册码 v9.4.2永久激活版

mac

苹果mac Windows软件 SecureFX 文件传输客户端

iTubeGo YouTube Downloader for Mac(YouTube 下载器)v7.2.0激活版

影影绰绰一往直前

Databend 源码阅读: Storage 概况和 Read Partitions

Databend

一些有趣的迹象:“前端已死”难道要成真了?

伤感汤姆布利柏

程序员 Vue 前端

PDF Squeezer for Mac(强大的PDF文件压缩工具)

晴雯哥

Adobe InDesign 2024 for mac v19.0 专业排版工具

晴雯哥

AI机器学习实战:构建智能系统的关键步骤

不在线第一只蜗牛

人工智能 机器学习 AI

Linux 爱好者线下沙龙:成都场圆满结束 & 下一场西子湖畔相见 | LLUG·第五站

OpenAnolis小助手

操作系统 杭州 龙蜥社区 LLUG Linux中国

Java中tranisent关键字到底是干嘛用的?

郑在暴富中

Java 关键字 transient

Adobe Camera Raw for Mac(Raw格式图像ps插件) v16.0.0中文激活版

影影绰绰一往直前

【AI编程助手】Devchat解析:深入了解、快速配置与实际应用

快乐非自愿限量之名

人工智能 DevChat AI编程

流程图是什么?一文弄懂流程图 - 定义 | 流程图符号 | 流程图如何制作

彭宏豪95

流程图 在线白板 画图工具 效率软件 流程图绘制

情感语音识别技术的挑战与未来发展

来自四九城儿

Acrobat Pro DC 2023 for mac(专业PDF编辑软件)v2023.006.20320中文激活版

mac

Acrobat Pro DC 2023 苹果mac Windows软件 PDF编辑和管理软件

李开复再度回应争议;10 月中国游戏厂商及应用出海收入 30 强出炉丨 RTE 开发者日报 Vol.86

声网

开发体育直播平台的商业创新:多元化收入模式引领行业转型

软件开发-梦幻运营部

好用且强大——JNPF永远的神

高端章鱼哥

软件开发 低代码

使用CURL获取速卖通详情的API接口

Noah

ACDSee Photo Studio 10 for Mac(专业的图像处理软件)v10.0.0激活版

影影绰绰一往直前

物联专栏丨物联网技术的挑战与趋势

inBuilder低代码平台

物联网

SaaS与PaaS平台的区别

树上有只程序猿

低代码 PaaS SaaS

AnyGo for Mac(在iPhone / iPad上轻松模拟GPS位置)v6.8.1激活版

影影绰绰一往直前

MATIC WORLD智能合约DAPP质押项目系统开发

l8l259l3365

软件开发提效工具——低代码(Low-Code)

互联网工科生

低代码 数字化

.NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth

快乐非自愿限量之名

.net 开发 第三方登录

前端DEF部署和BUC接入的“跨域”坑_大前端_闲鱼技术_InfoQ精选文章