🎉smart-http v1.3.4 发布,对国外非法请求 Say NO!


【源创会预告】1024 程序员节(的前两天),相约开源PHP办公室,我们一起聊 AI!>>>

1、smart-http 简介

smart-http 是一款可编程式 HTTP 应用微内核。它是目前市面上为数不多即能严格准守 RFC2616 规范,又兼顾卓越性能的 Http 服务器。

smart-http 建立在自研的通信框架 smart-socket 之上,使其有着纯正的国产化血统。该项目对标的是 nginx,高性能、轻量化是其追求和坚持的目标。

模块介绍

模块 说明 代码量
smart-http-common 基础通用模块,包括枚举、日志、工具类 2300+
smart-http-client HTTP Client 编解码和响应式编程设计 1400+
smart-http-server HTTP Server 和 WebSocket 的编解码和应用层接口设计 2800+
smart-http-restful 基于 smart-http-server 的简易版 MVC 模块(实验性 680
smart-http-restful-mybatis 类似 mybatis-spring(实验性 25
smart-http-test 单测模块 1600+

2、 版本更新

这是一个特别的版本,还是一个新的起点。

smart-http 一直以来都以「极简、易用、高性能」为设计理念,但凡跟这三点不相干的内容,我们从来不会去 care。

但是,随着近期观察到我部署在互联网上的服务频繁受到骚扰,让我意识到「安全」,也是 smart-http 应该去关注的方向。

以下是检测到来自世界各地的非正常访问:

  • 来自美国的流量,访问不存在资源。

  • 来自美国的流量,非正常 HTTP 报文

  • 来自越南的流量。

  • 来自荷兰的流量

除了非法请求,还有一些会长期占用 TCP 连接资源的情况。目前我的站点提供的只是一些简单的服务,此类流量还没有造成负面影响。但对于这种不礼貌的行径,我觉得作为一款专业的 http 服务,还是能够做一些事情的。

所以,我们决定在 smart-http 搭建一套 waf 的能力。主动防御一切非法请求,并给予以下反馈:

来自东方的神秘力量正在守护这片区域

这个版本主要搭建了 waf 的基础骨架,并实现了对于 Method、URI 的检测,后续我们再不断完善 waf 的检测规则和覆盖范围。

Maven

<dependency>
    <groupId>org.smartboot.http</groupId>
    <artifactId>smart-http-server</artifactId>
    <version>1.3.4</version>
</dependency>

<dependency>
    <groupId>org.smartboot.http</groupId>
    <artifactId>smart-http-client</artifactId>
    <version>1.3.4</version>
</dependency>

本次更新内容

  1. restful 模块新增 commons-fileupload 的适配,提供文件上传的处理能力。

  2. 新增 waf 模块,提升 HTTP 服务安全性。

3、快速上手

3.1 HTTP 服务端

public class SimpleSmartHttp {
    public static void main(String[] args) {
        HttpBootstrap bootstrap = new HttpBootstrap();
        bootstrap.httpHandler(new HttpServerHandler() {
            @Override
            public void handle(HttpRequest request, HttpResponse response) throws IOException {
                response.write("hello smart-http<br/>".getBytes());
            }
        }).setPort(8080).start();
    }
}

3.2 WebSocket 服务端

public class WebSocketDemo {
    public static void main(String[] args) {
        //1. 实例化路由Handle
        WebSocketRouteHandler routeHandle = new WebSocketRouteHandler();

        //2. 指定路由规则以及请求的处理实现
        routeHandle.route("/"new WebSocketDefaultHandler() {
            @Override
            public void handleTextMessage(WebSocketRequest request, WebSocketResponse response, String data) {
                response.sendTextMessage("接受到客户端消息:" + data);
            }
        });

        // 3. 启动服务
        HttpBootstrap bootstrap = new HttpBootstrap();
        bootstrap.webSocketHandler(routeHandle);
        bootstrap.start();
    }
}

3.3 Http 客户端

public class HttpGetDemo {
    public static void main(String[] args) {
        HttpClient httpClient = new HttpClient("www.baidu.com"80);
        httpClient.get("/").header().keepalive(false).done()
                .onSuccess(response -> System.out.println(response.body()))
                .onFailure(Throwable::printStackTrace)
                .done();
    }
}

3.4 Restful

<dependency>
    <groupId>org.smartboot.http</groupId>
    <artifactId>smart-http-restful</artifactId>
    <version>${smarthttp.version}</version>
</dependency>
@Controller
public class RestfulDemo {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String helloworld() {
        return "hello world";
    }

    public static void main(String[] args) throws Exception {
        RestfulBootstrap bootstrap = RestfulBootstrap.getInstance().controller(RestfulDemo.class);
        bootstrap.bootstrap().setPort(8080).start();
    }
}

smartboot 开源组织,一个容易被误认为是在 “重复造轮子” 的低调组织。曾获得 2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。

该组织内的明星项目包括:

  • smart-socket
    历时 5 年精炼出 2 千多行代码,轻松实现百万级长连接的 AIO 通信框架。

  • smart-http
    基于 smart-socket 实现的 HTTP/1.1 web 服务。

  • smart-servlet
    基于 smart-http 实现的 Servlet 3.1 容器服务。

  • smart-mqtt
    基于 smart-socket 实现的 MQTT 3.1.1/5.0 Broker&Client 服务。

  • smart-flow
    一款具备可观测性的轻量级业务编排框架。

组织地址:https://smartboot.tech/
代码仓库:https://gitee.com/smartboot


相關推薦

2023-08-28

站,聊聊 AI 大模型与底层技术 >>> bootx-platform v1.3.4 已经发布,单体式应用开发框架。 此版本更新内容包括: 新增: 通用导入组件 新增: 小程序端脚手架 新增: 小程序后端对接相关配置 新增: 敏感字管理和过滤功能 新

2022-06-01

Perl 5.36 发布啦,这是自 Perl 5.34.0 以来大约一年的大版本更新,带来了多项便利的新功能。比如新引入的 use x.xx  功能省略了代码顶部繁琐的功能模块声明,其次稳定了布尔跟踪、正则表达式集、支持 Unicode 14.0 等功能,还新

2022-10-21

smart-http v1.1.17 已经发布,轻量级的开源 HTTP 服务器。 此版本更新内容包括: 优化异常HTTP请求的堆栈信息以及响应报文输出。 补充单元测试用例。 合并PR: chunked 检测,去掉对 method 的限制 过滤 byte[0] 的写入,避免

2022-11-21

Next Terminal v1.3.4 已经发布,HTML5 的远程桌面网关。 此版本更新内容包括: 修复mysql模式下「资产授权列表」「用户授权列表」「用户组授权列表」无法使用的问题 fixed #315 修复资产新增、修改无权限的缺陷 fixed #314 修复

2022-09-02

昆仑管理系统 v1.3.4 发布了! 更新日志 1、增加快捷导航管理菜单; 2、优化监控统计、资源监控’菜单; 3、更新个人中心页面,增加角色权限和账号绑定设置; 4、优化并修复前端及后台若干问题 。 系统介绍 昆仑管

2022-07-15

先知 / Furion (探索版) 一个应用程序框架,您可以将它集成到任何 .NET/C# 应用程序中。 An application framework that you can integrate into any .NET/C# application. 安装 / Installation Package Manager Install-Package Furion .NET CLI dotnet a

2023-01-30

1、smart-http 简介 smart-http 是一款可编程式HTTP应用微内核。它是目前市面上为数不多的做到严格准守 RFC2616 规范,又兼顾卓越性能的 Http 服务器。 smart-http 完全建立在自研的通信框架 smart-socket 之上,保持了其纯正的国产化

2022-11-26

信息能及时得到回馈 调整分析数据,保证更精准的拦截非法的 IP 优化数据获取,减少对节点服务器的压力 洛甲 WAF, 它能做什么 洛甲 WAF 是基于 openresty 的 web 防火墙,它由多个或者单个节点服务器和中控服务器组成,

2022-10-07

smart-http v1.1.16 已经发布,轻量级的开源 HTTP 服务器。 此版本更新内容包括: 升级 smart-socket 至 1.5.22 改进 HTTP 解码算法 新增试验性质模块 smart-http-restful 合并PR: 添加logger.info预判 扩展WebSocketResponse,支持写byte[]slice

2022-07-07

Redkale 2.7.0 发布。 Redkale, 一个Java分布式微服务框架,1.6M的jar可以代替传统几十M的第三方。包含TCP/UDP、HTTP、RPC、依赖注入、序列化与反序列化、数据库操作、WebSocket等功能。  一方面模块高度整合,极大的简化业务开发代

2023-11-18

官网将推出全新的学习频道:Solon Faas 开发。 (5)设定 Smart-Http 为 solon-api 的默认 http-server(它也打磨几年了) smart-http ?它可能是国内唯一完整支持 http 1.1 协议的原创 http-server。换它,国产纯血度大升级! Solon 是什么框架

2024-04-25

优化 ws 连接控制,避免非法恶意空连 for Python 首次发布 Helloworld 演示 Server async def main(): server = await (SocketD.create_server("sd:ws") .listen(EventListener() .do_on_open(lambda s: #会话打开时 log.info(s.session_id()) ).do_on_message(lambda s, m: #

2023-05-27

Deno 1.34 已正式发布,主要更新内容是优化与 npm 和 Node.js 的兼容性,从而整体提升开发者体验,并为未来的性能增强奠定基础。 值得关注的变化: deno compile支持 npm 包 从 Deno v1.6 开始, deno compile支持将项目编译成单个

2023-11-04

自称曾负责 FAANG(美国科技巨头)招聘工作的“猎头”在推特发表了如下内容: 他表示自己在招人的时候,如果看到开发者的简历出现参与开源贡献的内容,会直接把简历扔掉。他认为,开发者有这么多的空闲时间来不求