Delphi Indy 10 IdHTTPProxyServer 修改Headers

问题描述

我正在尝试使用 Indy 10 在 Delphi XE2 中开发 CORS 代理服务器,以便我可以解决站点嵌入 IFrame 的问题,其中站点已将 x-frame-options 添加到响应标头。

谁能给我一些关于如何使用 IdHTTPProxyServer 来做到这一点的示例代码

解决方法

使用 TIdHTTPProxyServer 时,您只能在以下事件中修改 GET/POST/HEAD 请求的 HTTP 标头:

  • OnHTTPBeforeCommand 事件(客户端标头)
  • OnHTTPResponse 事件(服务器标头)
  • OnHTTPDocument 事件(客户端或服务器标头,取决于 TIdHTTPProxyServerContext.TransferSource 属性)当代理的 DefaultTransferMode 属性设置为 tmFullDocument 时。

标题存储在提供给每个事件的 Headers 对象的 TIdHTTPProxyServerContext 属性中。

例如,使用 OnHTTPResponse 事件,您可以轻松删除 X-Frame-Options 标头,例如:

procedure TMyForm.IdHTTPProxyServer1HTTPResponse(AContext: TIdHTTPProxyServerContext);
var
  I: Integer;
begin
  I := AContext.Headers.IndexOfName('X-Frame-Options');
  if I <> -1 then
    AContext.Headers.Delete(I);
end;

或者:

procedure TMyForm.IdHTTPProxyServer1HTTPResponse(AContext: TIdHTTPProxyServerContext);
begin
  AContext.Headers.Values['X-Frame-Options'] := '';
end;
,

对于 ProcessHTTPRequest - Resp: TIdHTTPResponseInfo - 你可以添加这一行来设置 http 头响应:

Resp.CustomHeaders.Values['X-Frame-Options'] := 'Deny';

与普通的 indy http 服务器一起工作,也应该与代理一起工作。 以同样的方式,您可以将其设置为空或其他值。

我看到你的帖子是在寻找一种“添加”它的方法 - 我希望这个答案能帮助正在寻找类似信息的其他人,即使实际答案并不是你在操作。