TsgcHTTP3Server › 方法 › SendPush
发送 HTTP/3 服务器推送(PUSH_PROMISE 及推送响应)。
procedure SendPush(const aQUICConn: TsgcQUICServerConnection; aPushId: Int64; const aRequest: TsgcHTTP3Request; const aResponse: TsgcHTTP3Response);
| 名称 | 类型 | 描述 |
|---|---|---|
aQUICConn | const TsgcQUICServerConnection | 推送发送所在的 QUIC 连接。 |
aPushId | Int64 | 标识此服务器推送及承载响应的单向推送流的推送 ID。 |
aRequest | const TsgcHTTP3Request | 推送所答复的合成请求。其 Method、Scheme、Host(authority)和 Path 被编码为 PUSH_PROMISE 帧的请求伪标头。 |
aResponse | const TsgcHTTP3Response | 在推送流上传递的响应。调用前请设置 StatusCode、ContentType、可选的 Headers 以及 Data 正文。 |
SendPush 首先在请求流上写入 PUSH_PROMISE 帧(携带请求伪标头),然后打开单向推送流(流类型 0x01,以推送 ID 为前缀),并通过 SendResponse 在该流上发送响应。服务器推送允许服务器主动将客户端尚未请求的资源推送给客户端。
客户端必须已通过通告非零的 MAX_PUSH_ID 来允许推送;若未允许,或推送 ID 超过该限制,客户端将丢弃推送。请注意,HTTP/3 服务器推送在大多数浏览器中已被弃用,因此仅在您控制的客户端上使用。
oRequest := TsgcHTTP3Request.Create;
oResponse := TsgcHTTP3Response.Create;
try
oRequest.Scheme := 'https';
oRequest.Host := 'example.com';
oRequest.Path := '/style.css';
oResponse.StatusCode := 200;
oResponse.ContentType := 'text/css';
oResponse.Data := TEncoding.UTF8.GetBytes('body { margin: 0; }');
oServer.SendPush(aConnection, 0, oRequest, oResponse);
finally
oResponse.Free;
oRequest.Free;
end;