TsgcHTTP3Server › 事件 › OnH3Request
收到完整 HTTP/3 请求时触发,以便应用程序填写响应。
property OnH3Request: TsgcHTTP3RequestEvent;
// TsgcHTTP3RequestEvent = procedure(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aRequest: TsgcHTTP3Request; const aResponse: TsgcHTTP3Response) of object
—
| 名称 | 类型 | 描述 |
|---|---|---|
aConnection | const TsgcQUICServerConnection | 请求到达的 QUIC 连接(公开 PeerIP、PeerPort 和连接状态)。 |
aRequest | const TsgcHTTP3Request | 收到的请求:Method、Path、Host、Scheme、Headers 和 Data 正文。 |
aResponse | const 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;