请求与响应深度解析

每个 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