问题描述
我正在尝试使用 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 服务器一起工作,也应该与代理一起工作。 以同样的方式,您可以将其设置为空或其他值。
我看到你的帖子是在寻找一种“添加”它的方法 - 我希望这个答案能帮助正在寻找类似信息的其他人,即使实际答案并不是你在操作。