请求与响应深度解析
每个 HTTP 服务器都遵循一个特定的循环。它接受连接、解析请求、匹配路由并发送响应。
Hyperlane 让这一过程变得简单。你可以通过直接的方法调用或简单的属性宏(attribute macros)来管理这个循环。
Hyperlane 如何处理请求生命周期:
- 服务器接受 TCP 连接。
- 将流解析为 Request 对象。
- 请求中间件处理数据。
- 服务器将请求匹配到路由。
- 执行路由处理器(route handler)。
- 运行响应中间件。
- 响应返回给客户端。
访问请求数据:
你可以使用 Context 对象从请求中提取数据。
• get_method() 用于获取 HTTP 方法。
• get_path() 用于获取 URL 路径。
• get_headers() 用于获取所有请求头。
• get_body_json() 用于解析 JSON 正文。
• try_get_query() 用于查找特定参数。
Hyperlane 还使用属性宏来自动提取数据。无需编写手动代码,你可以使用如下标签:
#[request_body_json]立即解析 JSON。#[request_query]获取 URL 参数。#[request_header]提取特定请求头。
路由管理与过滤:
你可以使用 {param} 语法定义动态路由。例如:"/test/{text}"。
Hyperlane 还允许你在路由级别过滤请求。你可以:
- 使用
#[host]匹配特定主机。 - 使用
#[reject_referer]拒绝特定的 Referer。 - 使用
#[filter]应用自定义逻辑。
管理响应与 Cookie: 你可以通过 Context 对象控制响应。你可以手动设置状态码、请求头和正文。 为了简化这一过程,请使用响应宏:
#[response_status_code(200)]#[response_body("Hello World")]
对于会话管理,请使用 CookieBuilder。它允许你使用简洁的语法设置过期日期、域名以及 HttpOnly 或 Secure 等安全标志。
响应准备就绪后,你可以使用 build() 和 try_send() 等方法通过流将其发送出去。
Hyperlane 为你提供了两种工作方式。当你需要显式控制时,使用方法调用;当你想要简洁、高效的代码时,使用属性宏。
项目代码:https://github.com/hyperlane-dev/hyperlane
来源:https://dev.to/tengxgfyrz67s/request-and-response-deep-dive-1j1b