TsgcWebSocketLoadBalancerServer › イベント › OnLoadBalancerHTTPResponse
ロードバランサーがバックエンドから HTTP 応答を受信した後、ダウンストリームクライアントに返される前に発火します。
property OnLoadBalancerHTTPResponse: TsgcWSLBHTTPResponseEvent;
// TsgcWSLBHTTPResponseEvent = procedure(Sender: TObject; Connection: TsgcWSConnection; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo; E: Exception) of object
—
OnLoadBalancerHTTPResponse は、バックエンドが転送された HTTP リクエストに応答した後、または転送が失敗した後に発生します。ARequestInfo は元のリクエストで、AResponseInfo にはバックエンドからのレスポンス(ResponseNo、ContentText/ContentStream、カスタムヘッダー)が含まれており、ダウンストリームクライアントに書き戻される前に変更できます。E は転送中に発生した例外です(交換が成功した場合は nil)。E が割り当てられている場合は、AResponseInfo フィールドを設定することでカスタムエラーレスポンスを構築できます。典型的な使用例は、セキュリティレスポンスヘッダーの追加、リバースプロキシシナリオのための Location ヘッダーの書き換え、レイテンシメトリクスの収集、バックエンド障害をカスタム HTTP 502 ページに変換することなどです。
procedure OnLoadBalancerHTTPResponse(Sender: TObject; Connection: TsgcWSConnection;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo; E: Exception);
begin
if Assigned(E) then
begin
AResponseInfo.ResponseNo := 502;
AResponseInfo.ContentText := 'Backend unavailable: ' + E.Message;
end
else
AResponseInfo.CustomHeaders.Add('X-LoadBalancer: sgcWebSockets');
end;