TsgcHTTP3Server › 事件 › OnH3Request

OnH3Request 事件

收到完整 HTTP/3 请求时触发,以便应用程序填写响应。

语法

property OnH3Request: TsgcHTTP3RequestEvent;
// TsgcHTTP3RequestEvent = procedure(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aRequest: TsgcHTTP3Request; const aResponse: TsgcHTTP3Response) of object

默认值

—

参数

名称类型描述
aConnectionconst TsgcQUICServerConnection请求到达的 QUIC 连接(公开 PeerIP、PeerPort 和连接状态)。
aRequestconst TsgcHTTP3Request收到的请求:Method、Path、Host、Scheme、Headers 和 Data 正文。
aResponseconst TsgcHTTP3Response要填写的响应:设置 StatusCode、ContentType、可选的 Headers 和 Data 正文。

备注

OnH3Request 在服务器收到完整的 HTTP/3 请求(请求标头以及 POST、PUT 和 PATCH 等携带正文的方法的正文)后触发。服务器在触发事件前创建 aResponse 对象,并将其 StatusCode 预设为 200,因此只需返回空 200 的处理程序可以不修改它。根据需要填写 aResponse.StatusCode、aResponse.ContentType、aResponse.Headers 和 aResponse.Data;处理程序返回后,服务器自动对标头进行 QPACK 编码,并在请求流上发送响应。无需在此事件内调用 SendResponse。检查 aRequest.Path 和 aRequest.Method 以路由请求。

示例


procedure OnH3RequestEvent(Sender: TObject; const aConnection:
    TsgcQUICServerConnection; const aRequest: TsgcHTTP3Request;
    const aResponse: TsgcHTTP3Response);
begin
  if aRequest.Path = '/hello' then
  begin
    aResponse.StatusCode := 200;
    aResponse.ContentType := 'text/plain';
    aResponse.Data := TEncoding.UTF8.GetBytes('Hello HTTP/3');
  end
  else
    aResponse.StatusCode := 404;
end;

返回事件