Moco 1.5.0 发布,模拟服务器
我很高兴地宣布,Moco 1.5.0正式发布了。
Moco是什么?
Moco 是一个可以轻松搭建模拟服务器的框架/工具/程序库。
主要能力
Moco 可以方便地支持 HTTP 模拟服务器的搭建。
- 根据需要,匹配响应的请求,返回相应的应答,配置诸如 HTTP 版本、内容和 HTTP 头等信息。
- 模拟服务器的特殊场景,比如,响应慢。
- 将转发请求至远程服务器,隔离不稳定的服务器。
- 接收请求后异步调用,模拟多级 HTTP 请求的场景。
- 用于单元测试场景,校验请求状况,进行细节验证。
- 提供文件挂载能力,给前端开发提供便利。
更详细的 API,请参考 API。
更多的使用方式,请参考 用法。
过往版本更新:Moco 1.4.0、Moco 1.3.0
版本变更
在 1.5.0 版本中,新增了下面几个 API:
- 在应答响应中,增加
cors
,以支持 CORS,下面是 CORS 配置对应的 API:allowOrigin
(Access-Control-Allow-Credentials)allowCredentials
(Access-Control-Allow-Credentials)exposeHeaders
(Access-Control-Expose-Headers)maxAge
(Access-Control-Max-Age)allowMethods
(Access-Control-Allow-Methods)allowHeaders
(Access-Control-Allow-Headers)
- 在模板中,增加了
req.client.port
,支持获取客户端连接端口信息 - 在Cookie中,增加了
sameSite
,对 SameSite 属性进行配置
CORS
在 1.5.0 中最大的一个新增特性是对于 CORS 的支持。跨域访问是软件开发中常常遇到的问题,因此,服务端常常需要配置对于 CORS(Cross-origin resource sharing)的支持。我们可以通过在应答中配置cors
来设置服务器对于 CORS 的支持。
默认的 CORS 设置
使用 CORS 最简单的方式是默认支持 CORS,也就是允许所有的跨域访问。这时,我们无需配置任何信息,只要在应答中设置cors
即可。
- Java API
server.response(cors());
- JSON API
{ "response" : { "cors" : true } }
在这种默认的情况下,Moco 会设置常用的 HTTP 头以支持 CORS,比如:
Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: *
allowOrigin/Access-Control-Allow-Origin
在 CORS 中,通过设置 Access-Control-Allow-Origin 这个头,我们可以限制哪些域名可以进行跨域访问。通过 allowOrigin
,我们可以设置 Access-Control-Allow-Origin HTTP 头,比如:
- Java API
server.response(cors(allowOrigin("https://www.github.com/")));
- JSON API
{ "response" : { "cors" : { "allowOrigin" : "https://www.github.com/" } } }
如果允许来自所有域名的请求访问,我们可以将 allowOrigin
的值设置成 *
。
在 JSON API 中,我们还可以直接设置 Access-Control-Allow-Origin。
- JSON
{ "response" : { "cors" : { "Access-Control-Allow-Origin" : "https://www.github.com" } } }
allowMethods/Access-Control-Allow-Methods
在 CORS 中,通过设置 Access-Control-Allow-Methods 这个头,我们可以限制哪些 HTTP 方法可以进行跨域访问。通过 allowMethods
,我们可以设置 Access-Control-Allow-Methods HTTP 头,比如:
- Java API
server.response(cors(allowMethods("GET", "PUT"))); server.response(cors(allowMethods(HttpMethod.GET, HttpMethod.PUT)));
在 Java API 中,你可以直接使用字符串进行设置,或者使用 HttpMethod 的枚举。
- JSON
{ "response" : { "cors" : { "allowMethods" : ["GET", "PUT"], } } }
如果允许所有的 HTTP 方法,我们可以将 allowMethods
的值设置成 *
。
在 JSON API 中,我们还可以直接设置 Access-Control-Allow-Methods。
- JSON
{ "response" : { "cors" : { "Access-Control-Allow-Methods" : ["GET", "PUT"] } } }
allowHeaders/Access-Control-Allow-Headers
在 CORS 中,Access-Control-Allow-Headers 这个头表示服务器支持的所有头信息字段。通过 allowHeaders
,我们可以设置 Access-Control-Allow-Headers HTTP 头,比如:
- Java API
server.response(cors(allowHeaders("X-Header", "Y-Header")));
- JSON
{ "response" : { "cors" : { "allowHeaders" : ["X-Header", "Y-Header"] } } }
如果支持所有的 HTTP 头,我们可以将 allowHeaders
的值设置成 *
。
在 JSON API 中,我们还可以直接设置 Access-Control-Allow-Headers。
{ "response" : { "cors" : { "Access-Control-Allow-Headers" : ["X-Header", "Y-Header"] } } }
maxAge/Access-Control-Max-Age
在 CORS 中,Access-Control-Max-Age 这个头表示预检请求的有效期。通过 maxAge
,我们可以设置 Access-Control-Max-Age HTTP 头,这里我们需要设置时间以及其单位,比如:
- Java API
server.response(cors(maxAge(1728000, TimeUnit.SECONDS)));
- JSON
{ "response" : { "cors" : { "maxAge": { "duration": 1728000, "unit": "second" } } } }
在 JSON API 中,我们还可以直接设置 Access-Control-Max-Age。
{ "response" : { "cors" : { "Access-Control-Max-Age" : { "duration": 1728000, "unit": "second" } } } }
allowCredentials/Access-Control-Allow-Credential
在 CORS 中,Access-Control-Allow-Credential 这个头表示是否允许发送Cookie。通过 allowCredentials
,我们可以设置 Access-Control-Allow-Credential HTTP 头,比如:
- Java API
server.response(cors(allowCredentials(true)));
- JSON
{ "response" : { "cors" : { "allowCredentials" : true } } }
在 JSON API 中,我们还可以直接设置 Access-Control-Allow-Credentials。
{ "response" : { "cors" : { "Access-Control-Allow-Credentials" : true } } }
exposeHeaders/Access-Control-Expose-Headers
在 CORS 中,Access-Control-Expose-Headers 指定了浏览器能够通过 XMLHttpRequest
对象的getResponseHeader()
方法得到的 HTTP 头信息。通过 exposeHeaders
,我们可以设置 Access-Control-Expose-Headers 这个 HTTP 头,比如:
- Java API
server.response(cors(exposeHeaders("X-Header", "Y-Header")));
- JSON
{ "response" : { "cors" : { "exposeHeaders" : ["X-Header", "Y-Header"] } } }
在 JSON API 中,我们还可以直接设置 Access-Control-Expose-Headers。
{ "response" : { "cors" : { "Access-Control-Expose-Headers" : ["X-Header", "Y-Header"] } } }
req.client.port
req.client.port
提供了在模板中访问客户端连接端口的能力。
- Java API
server.request(by(uri("/template"))).response(template("${req.client.port}"));
- JSON API
{ "request": { "uri": "/template" }, "response": { "text": { "template": "${req.client.port}" } } }
sameSite
相比于原有的几个 Cookie 属性,SameSite 是一个后来增加的 Cookie 属性,用来防止 CSRF 攻击和用户追踪。sameSite
API 可以让我们为 Cookie 设置 SameSite 属性。
- Java API
server.response(cookie("loggedIn", "true", sameSite("NONE")), status(302)); server.response(cookie("loggedIn", "true", sameSite(CookieAttribute.SameSite.NONE)), status(302));
sameSite
支持 STRICT、LAX、NONE 几个值。在 Java API 中,你可以直接使用字符串进行设置,或者使用 CookieAttribute.SameSite 的枚举。
- JSON API
{ "request": { "uri": "/cookie-with-same-site" }, "response": { "cookies": { "login": { "value": "true", "sameSite": "Lax" } } } }
欢迎使用 1.5.0 版本,体验 Moco 最新的功能!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
腾讯官宣:QQ 已实现“三端同步更新”
腾讯官方宣布,QQ 已实现“三端同步更新”(Windows、Linux 和 Mac),并且未来也会继续执行“三端同步更新”的策略。 与另外两个版本相比,目前 Linux 版 QQ 的功能比较欠缺。对此,腾讯QQ开发团队表示,他们正在全力赶上。Windows系统有的,Linux系统早晚都会有,真正做到三端统一。 公告原文。
- 下一篇
Linux from Scratch 12.0 发布
Linux From Scratch 社区发布了最新版本的更新,分别是 LFS 12.0 版、LFS 12.0 (systemd)、BLFS 12.0 和 BLFS 12.0 (systemd)。 Linux From Scratch 项目简称 LFS,它提供必要的步骤,帮开发者一步一步地定制自己的 Linux 系统。LFS 最主要的意义是教人们认识一个 Linux 系统其内部是如何工作的。自己创建一份 LFS 系统将让你了解到 Linux 工作的每个细节,以及它们是如何彼此依赖和协同工作的。并且你可以按自己的喜好和需求定制它。 Beyond Linux From Scratch(BLFS)提供了在 LFS 的基础上,进一步完善 Linux 基本系统的指引。在 BLFS 中,读者可以学习到如何为系统增加网络、X 桌面、声音、打印机和扫描仪支持。 公告指出,此版本是 LFS 和 BLFS 的重大更新。LFS 版本包括 binutils-2.41、gcc-13.2.0 和 glibc-2.38 的更新。自上次发布以来,总共更新了 38 个软件包。Linux 内核也已更新至版本 6.4.12...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能