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 支持 STRICTLAXNONE 几个值。在 Java API 中,你可以直接使用字符串进行设置,或者使用 CookieAttribute.SameSite 的枚举。

  • JSON API
{
"request": {
"uri": "/cookie-with-same-site"
},
"response": {
"cookies": {
"login": {
"value": "true",
"sameSite": "Lax"
}
}
}
}

欢迎使用 1.5.0 版本,体验 Moco 最新的功能!


相關推薦

2022-09-08

训练、端侧部署推理。 五 Roadmap 后续我们计划每个月发布Release版本。近期的Roadmap如下: Transformer 分类任务训练性能优化 & benchmark 自监督学习增加检测&分割benchmark 开发更多基于Transformer的下游任务,检测 & 分

2023-01-06

录 使用常用的 BusyBox 进行 Docker 集成 启动较新版本的服务器时覆盖内置设备文件 修复 reset console。修复 #1619 仅对 Python <= 3.9 使用 importlib_resources。修复 #2147 Docker 容器中定义的 user 字段为 ID 时支持。修复 #21

2023-07-19

块可以模拟真实的网络环境,并且在模拟测试的过程中与服务器交互是可持续的、可互动的。 可互动模式是用于调试测试某些功能。在互动的过程中,开发者可以在控制台中指定执行某个模拟请求命令,并且支持在控制台中输

2022-04-13

RetroArch 1.10.3 现已发布。RetroArch 是款功能强大的跨平台模拟器,不但能够模拟许多不同的游戏主机,还能在 Windows、MacOS、Linux、Android、iOS 以及多种游戏主机上执行。 更新内容如下: ANDROID:解耦 Play Core 依赖以使应用程序符

2023-03-10

继上个月发布了首个 Android 14 开发者预览版之后,第二版 Android 14 开发者预览版(以下简称 Android 14 DP 2)已于今天开始推出,这也是最后一个开发者预览版,之后 Android 14 将脱离开发者预览阶段,进入 Bete 测试阶段,Android 14 DP

2021-12-14

新功能 #304 - 增加对 PHP 8.1 初始化器中新功能的支持PHP 8.1 在初始化器中引入了新功能,Phake 4.2 现在可以使用此功能创建对象的模拟。#303 - 增加对 PHP 8.1 交集类型和 never 返回类型的支持PHP 8.1 引入了交集类型和 never 返回类

2022-09-17

。 Qt HTTP Server 模块可通过可选的 TLS 支持轻松地将 HTTP 服务器嵌入到应用程序中。但文档中提及,它更多是面向嵌入式应用的本地/基于 LAN 的 Web 服务,不具备面向 Internet 的 Web 服务器的稳健性和安全性。 Qt Quick 3D Physics 提供

2023-07-22

n 确认彻底放弃上架 Steam 平台。 Dolphin 开发团队在今天发布的博文中表示,任天堂官方并未向该团队或者 Valve 发送 DMCA 通知,来阻止该软件上架 Steam 平台。 实际情况是当得知 Dolphin 要上架 Steam 后,Valve 法务部门联系了任天

2023-12-12

的交互,测试 Web 应用的行为是否正确。 Mink 1.11.0 现已发布,此版本更新内容如下: New features: 添加了对symfony/css-selector7 的支持 为支持的键修饰符添加了常量 改进类型以帮助静态分析 为大多数方法添加了参数类型

2023-06-06

Blink 1.0 已正式发布。 Blink 是无特权用户空间虚拟机,支持在任何 POSIX 平台上模拟 x86-64-linux 二进制文件,声称是最小的 x86 Linux 模拟器。 总的来说,它是一个 220kb 的无依赖静态二进制文件,实现了大约 600 条 x86 指令和 180 条

2022-11-01

经过四个星期的开发,MAME 0.249 现已发布。MAME 最初是街机模拟器,随着时间的推移,MAME 吸收了姊妹项目 MESS(多机种模拟器超级系统),所以 MAME 现在还记录了各种各样的(大多是老式的)电脑游戏、掌机游戏和电子游戏(视

2022-09-30

台上的深色和浅色模式,也可以在 macOS 上使用。 Qt HTTP 服务器 (TP) 新模块可以轻松地将 HTTP 服务器添加到任何 Qt 应用程序。服务器实现了对 HTTP 1.1 的部分支持,并通过传输层安全协议支持安全性。 文档中提及,它更多是

2023-01-03

MAM 0.251 现已发布。MAME 最初是街机模拟器,随着时间的推移,MAME 吸收了姊妹项目 MESS(多机种模拟器超级系统),所以 MAME 现在还记录了各种各样的(大多是老式的)电脑游戏、掌机游戏和电子游戏(视频游戏)。 此次更新添

2022-08-19

Android Studio Dolphin(版本号为 2021.3.1)首个 RC 已发布。 已达到稳定版状态的新特性 Jetpack Compose Compose 动画组合 Compose 多重预览注解 布局检查器中的 Compose 重新组合计数 Wear OS Wear OS 模拟器配对助手 Wear OS 模拟器侧