前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 Whistle 作为 API 服务网关

使用 Whistle 作为 API 服务网关

原创
作者头像
猫哥学前班
修改于 2019-09-30 13:09:30
修改于 2019-09-30 13:09:30
3.3K0
举报
文章被收录于专栏:猫哥学前班猫哥学前班

最近写了一款 React 的工具,能拉取团队成员 Jira 上的 Task 和 Bug,根据其 Task 的 Efforts 时长和 Bug 的修复时长,计算对应的绩效指标。

今天给大家介绍下,我是如何在这个项目中利用 Whistle 来实现 API 服务网关的(还不知道 Whistle ?看这里)。

在项目开发过程中,前端本地的 webpack 会启动服务并监听一个端口(例如 8000),浏览器访问 http://localhost:8000 即可进行页面的开发预览。

假如你的 Jira 站点为 https://jira.example.com ,此时,需要浏览器能直接对 Jira 的 Rest API 服务(https://jira.example.com/rest/api/)发起请求。

1. CORS 合法化配置

当浏览器向与当前页面域名不同的域名发起 API 请求时,会触发 CORS 策略,以确保请求是被目标服务所允许的。

本地开发时的域名是 localhost,API 服务是 example.com,所以会触发 CORS 及其 Preflight Request 策略。

CORS Error
CORS Error

Whistle 提供了 resCors 协议可以很方便的为 response 加上 CORS 相关的 Header(Access-Control-Request-* )。

如下图配置,我们可以设置允许来源 origin 为任意站点(*),允许自定义 Header Authorization 和 Content-Type 的使用:

代码语言:txt
AI代码解释
复制
https://jira.example.com/rest/api resCors://{resCorsTest.json} delete://req.headers.User-Agent

```resCorsTest.json
{
"origin": "*",
"headers": "authorization,content-type",
}
```

同时,我们还使用 delete 协议删除了请求头中的 UA 头信息(req.headers.User-Agent),让 API 服务无法判断出请求的发起方是否为浏览器(注意:Jira Rest API 会针对浏览器开启 XSRF Check)。

2. HTTP Header/Body 的过滤与修改

CORS 合法化配置完成后,浏览器已经可以成功发起跨域 API 请求,但在 console 控制台中,还有上图中的黄色 warning 需要消除。

这个 warning 的原因在于,options 请求的响应头中设置了 X-Content-Type-Options: nosniff,我们可以使用 includeFilter 针对 options HTTP Method,删除掉这个 Header:

代码语言:txt
AI代码解释
复制
https://jira.example.com/rest/api includeFilter://m:options delete://res.headers.X-Content-Type-Options 

如有需要,我们还可以利用 headerReplace 将某个 Header 替换成其他的值,以及使用 resBody 来设置 response 的 body 内容:

代码语言:txt
AI代码解释
复制
https://jira.example.com/rest/api headerReplace://res.Content-Type:/.*/=application/json resBody://({}) 

3. 同域网关

事实上,Whistle 作为代理网关,可以更加方便的绕过 CORS 策略限制。

我们只需为我们的静态页面和 API 服务设置一个相同的自定义域名,然后全部交给 Whistle 即可。

假如这里我们的自定义域名为:http://my.jira.com ,我们只需把对 http://my.jira.com/rest/api 的访问转发到 https://jira.example.com/rest/api 即可:

代码语言:txt
AI代码解释
复制
http://my.jira.com/rest/api https://jira.example.com/rest/api delete://headers.User-Agent
http://my.jira.com 127.0.0.1:8000

(注意:/rest/api 需要配置在前面,确保优先命中)

由于 Rest API 的域名和当前页面设置为同域,所以不会产生 CORS 与 Preflight Request 限制。

在本地开发完成后,我们可以使用 file 协议,直接将自定义域名映射到静态文件目录上。另外,由于需要在 JS 代码中隐藏 Jira HTTP 鉴权的用户名和密码,我们可以通过 auth 协议将这部分信息配置在 Whistle 网关中。以下是完整配置:

代码语言:txt
AI代码解释
复制
http://my.jira.com/rest/api https://jira.example.com/rest/api delete://headers.User-Agent auth://your-username:your-password 
http://my.jira.com file:///path/to/your/project/dist/

同域网关除了以上这种配置外,还有另外一种逆向思路:

将静态页面域名配置成实际的 API 服务域名,借助 xfile 协议,我们可以将未命中的请求全部转发到实际的线上服务,只需以下一行配置:

代码语言:txt
AI代码解释
复制
https://jira.example.com/ xfile:///path/to/your/project/dist/

需要注意的是,以上这种方法需要安装 Whistle CA 证书,用于解析 HTTPS 协议。

怎么样?把 Whistle 作为 API 服务网关,而不需要使用 Node 或 Nginx 服务来转发,是不是既简单又方便?赶紧试试吧:)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
腾讯云SCF + 腾讯云API网关实现跨域
跨来源资源共享(Cross-Origin Resource Sharing(CORS))是一种使用额外 HTTP 标头来让目前浏览网站的 user agent 能获得访问不同来源(网域)服务器特定资源之权限的机制。当 user agent 请求一个不是目前文件来源——来自于不同网域(domain)、通信协定(protocol)或通信端口(port)的资源时,会建立一个跨来源HTTP请求(cross-origin HTTP request)。
孔令飞
2019/11/01
17.6K1
腾讯云SCF + 腾讯云API网关实现跨域
后端工程师需要了解的跨域知识
产品有多端:机构端,局方端 ,家长端等 。每端都有独立的域名,有的是在PC上访问,有的是通过微信公众号来访问,有的是扫码后H5展现。
勇哥java实战
2022/01/14
1K0
后端工程师需要了解的跨域知识
系统服务化构建-跨域CROS
文本讨论关于接口开发中的跨域 CORS。CORS 是一种浏览器协议,源于 HTTP 请求的安全策略,在这个体系中的关键词有,同源策略,XMLHttpRequest,Ajax,和前后端分离。
needrunning
2019/12/10
1.1K0
系统服务化构建-跨域CROS
一篇文章让你搞懂如何通过Nginx来解决跨域问题
出于安全考虑(比如csrf攻击),浏览器一般会禁止进行跨域访问,但是因为有时有相应需求,需要允许跨域访问,这时,我们就需要将跨域访问限制打开。   启动一个web服务,端口是8081
用户4919348
2020/06/21
39.7K2
怎么解决跨域
存在浏览器同源策略,所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到,跨域限制主要的目的就是为了用户的上网安全。
程序员子龙
2024/04/30
2280
014.Nginx跨域配置
同源策略是一个安全策略。同源,指的是协议,域名,端口相同。浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,不能读写对方的资源。
木二
2020/07/21
6.9K0
014.Nginx跨域配置
【云函数SCF】浏览器请求函数URL,实现CORS
云函数可以让业务部署更快速更轻松,对于我来说,部署API非常方便,在以前API网关就担任了HTTP触发器的功能,不过在今年7月,API网关宣布了下架的消息,转而使用TSE云原生网关,不过对于我们业务量不大的用户来说,TSE的价格实在承担不起,而且很多功能也用不上
Ar-Sr-Na
2024/08/31
5201
Hystrix断路器在微服务网关中的应用(Spring Cloud Gateway)
在之前的一篇文章:微服务网关Zuul迁移到Spring Cloud Gateway,我们讲解了如何从Zuul迁移到新的组件:Spring Cloud Gateway,以及扩展了微服务网关的功能,包括限流过滤器、断路器过滤器等。然而很多读者在使用的时候反馈,使用POSTMAN发送GET请求测试断路器是正常的,然而POST请求会出现:
aoho求索
2018/12/29
1.8K0
深入理解跨域问题
想了解跨域就要先了解什么是同源策略,就好比你要了解什么苹果手机”越狱“,首先要了解什么是ios操作系统。 了解以下名词:
读懂原理
2022/05/13
1.2K0
深入理解跨域问题
深入了解 CORS
文章介绍了操作系统文件系统崩溃恢复机制,包括概念、日志系统特性,详细讲解了 xv6 文件系统写入文件操作步骤、各步骤功能及崩溃恢复情况,还指出 xv6 存在的问题及后续将介绍 Ext3 文件系统。
写bug的高哈哈
2024/11/12
2030
深入了解 CORS
什么是 HTTP 请求中的 preflight 类型请求
在浏览器的 HTTP 请求中,当我们使用 fetch API 或者 XMLHttpRequest 来进行跨域请求时,浏览器有时会发送一种称为 Preflight 的请求。这种请求是浏览器在实际发送跨域请求前,先与目标服务器进行的一次 "探测" 请求,以确认服务器是否允许这样的请求方式。Preflight 请求的存在是为了保障浏览器的安全性,确保跨域请求不会在没有服务器允许的情况下进行。
编程小妖女
2025/02/02
2470
什么是 HTTP 请求中的 preflight 类型请求
CORS 跨域问题解决办法
我们在编写自己的网站时请求一些接口或者网页资源时,可能会遇到请求无响应的现象,这时按F12查看控制台会发现报出了下面这句错误,这其实就是跨域资源共享(CORS)协议阻止了请求。 Access to XNLAttpRequest at 'https://xxx.xxxx.xxx' from origin 'https://xxx.xxx.xxx' has xxx.xx been blocked by coRs policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
XG.孤梦
2022/09/23
2.3K0
CORS 跨域问题解决办法
whistle 开发调试最佳实践
whistle 相当于一个连接客户端和远程服务器的“中转站”,当你向服务器发出请求后,代理服务器先获取用户的请求,再将服务请求转发至远程服务器,并将远程服务器反馈的结果再转交给客户端。
尹光耀
2022/03/22
3.1K0
whistle 开发调试最佳实践
浏览器中的跨域问题与 CORS
跨域,这或许是前端面试中最常碰到的问题了,大概因为跨域问题是浏览器环境中的特有问题,而且随处可见,如同蚊子不仅盯你肉而且处处围着你转让你心烦。「你看,在服务器发起 HTTP 请求就不会有跨域问题的」。
山月
2020/09/08
1.5K0
前端应该知道的web调试工具——whistle
第一,whistle 是一个 web 调试代理工具,它的功能十分强大。作为一名前端,我们需要经常跟协议中的应用层打交道,Mock 数据、跨域问题、cookie 的修改、移动端调试等等,都是我们必备的技能,而 whistle 就能解决其中 90% 的问题
GopalFeng
2020/09/24
2.5K0
前端应该知道的web调试工具——whistle
工具系列 | 跨域资源共享 CORS 教程
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
Tinywan
2023/03/08
8350
工具系列 | 跨域资源共享 CORS 教程
CORS攻击原理介绍和使用
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。
全栈工程师修炼指南
2020/10/23
6.6K0
CORS攻击原理介绍和使用
python 生产实战 跨域资源那些事儿~
CORS 是一个 W3C 标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。本文详细介绍 CORS 的内部机制
python编程从入门到实践
2021/03/29
8920
Vite + whistle:一劳永逸的开发环境代理方案
我们用webpack或vite等工具开发本地项目时,浏览器一般会输入的域名是:127.0.0.1:3000来调试页面。当要请求三方接口时「随便拿个api来举例子」,就会发生下面情况。。。
南山种子外卖跑手
2022/02/22
2.4K1
Vite + whistle:一劳永逸的开发环境代理方案
【知识】跨源资源共享(CORS)的定义/使用场景/机制/格式
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源同源使用的限制。
辉哥
2022/05/13
1.3K0
【知识】跨源资源共享(CORS)的定义/使用场景/机制/格式
相关推荐
腾讯云SCF + 腾讯云API网关实现跨域
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档