响应和响应尾部

默认情况下,所有响应标头和尾部都从代理响应复制到传出客户端响应。 响应和响应尾部转换可以指定它们是只应用于成功的响应还是应用于所有响应。

在代码中,这些实现为抽象类 ResponseTransformResponseTrailersTransform 的派生。

ResponseHeadersCopy

设置是否将目标响应标头复制到客户端

密钥 价值 违约 必选
ResponseHeadersCopy 真/假 是的

Config:

{ "ResponseHeadersCopy": "false" }

代码:

routeConfig = routeConfig.WithTransformCopyResponseHeaders(copy: false);
transformBuilderContext.CopyResponseHeaders = false;

此设置用于确定是否将所有代理响应标头复制到客户端响应。 此设置默认处于启用状态,可以通过配置变换为 false 值来禁用此设置。 即使禁用了此功能,引用特定标头的转换仍将运行。

ResponseHeader

添加或替换响应标头

密钥 价值 违约 必选
ResponseHeader 标头名称 (无) 是的
Set/Append 标头值 (无) 是的
什么时候 成功/始终/失败 成功

Config:

{
  "ResponseHeader": "HeaderName",
  "Append": "value",
  "When": "Success"
}

代码:

routeConfig = routeConfig.WithTransformResponseHeader(headerName: "HeaderName", value: "value", append: true, ResponseCondition.Success);
transformBuilderContext.AddResponseHeader(headerName: "HeaderName", value: "value", append: true, always: ResponseCondition.Success);

示例:

HeaderName: value

这会设置或追加命名响应标头的值。 Set 替换任何现有标头。 Append 会添加具有给定值的额外标头。 注意:不建议将“”设置为标头值,并可能导致未定义的行为。

When 指定是否应在所有响应、成功响应或失败响应中包含响应头。 任何状态代码小于 400 的响应都被视为成功。

ResponseHeaderRemove

删除响应标头

密钥 价值 违约 必选
ResponseHeaderRemove 标头名称 (无) 是的
什么时候 成功/始终/失败 成功

Config:

{
  "ResponseHeaderRemove": "HeaderName",
  "When": "Success"
}

代码:

routeConfig = routeConfig.WithTransformResponseHeaderRemove(headerName: "HeaderName", ResponseCondition.Success);
transformBuilderContext.AddResponseHeaderRemove(headerName: "HeaderName", ResponseCondition.Success);

示例:

HeaderName: value
AnotherHeader: another-value

这会删除命名的响应标头。

When 指定是否应针对所有响应、成功或失败响应删除响应标头。 任何状态代码小于 400 的响应都被视为成功。

ResponseHeadersAllowed

密钥 价值 必选
ResponseHeadersAllowed 以分号分隔的允许标头名称列表。 是的

Config:

{
  "ResponseHeadersAllowed": "Header1;header2"
}

代码:

routeConfig = routeConfig.WithTransformResponseHeadersAllowed("Header1", "header2");
transformBuilderContext.AddResponseHeadersAllowed("Header1", "header2");

YARP 默认从代理响应复制大多数响应标头(请参阅 ResponseHeadersCopy)。 某些安全模型仅允许代理特定标头。 此转换将禁用 ResponseHeadersCopy,并且仅复制给定标头。 如果未包含在允许列表中,则修改或追加到现有标头的其他转换可能会受到影响。

请注意,默认情况下,某些标头 YARP 不会复制,因为它们特定于连接或其他安全敏感(例如Connection)。 Alt-Svc 将这些标头名称放在允许列表中将绕过该限制,但强烈建议不要这样做,因为它可能会对代理的功能产生负面影响或导致安全漏洞。

示例:

Header1: value1
Header2: value2
AnotherHeader: AnotherValue

仅从代理响应复制“header1”和“header2”。

ResponseTrailersCopy

设置是否将目标尾随响应标头复制到客户端

密钥 价值 违约 必选
ResponseTrailersCopy 真/假 是的

Config:

{ "ResponseTrailersCopy": "false" }

代码:

routeConfig = routeConfig.WithTransformCopyResponseTrailers(copy: false);
transformBuilderContext.CopyResponseTrailers = false;

此选项设置是否将所有代理响应尾部复制到客户端响应。 此设置默认处于启用状态,可以通过配置变换为 false 值来禁用此设置。 即使禁用了此功能,引用特定标头的转换仍将运行。

ResponseTrailer

添加或替换尾随响应标头

密钥 价值 违约 必选
ResponseTrailer 标头名称 (无) 是的
Set/Append 标头值 (无) 是的
什么时候 成功/始终/失败 成功

Config:

{
  "ResponseTrailer": "HeaderName",
  "Append": "value",
  "When": "Success"
}

代码:

routeConfig = routeConfig.WithTransformResponseTrailer(headerName: "HeaderName", value: "value", append: true, ResponseCondition.Success);
transformBuilderContext.AddResponseTrailer(headerName: "HeaderName", value: "value", append: true, ResponseCondition.Success);

示例:

HeaderName: value

响应尾部是在响应正文末尾发送的标头。 对预告片的支持在 HTTP/1.1 实现中并不常见,但在 HTTP/2 实现中很常见。 检查客户端和服务器是否支持。

ResponseTrailer 遵循与 ResponseHeader 相同的结构和指导。

ResponseTrailerRemove

删除尾随响应标头

密钥 价值 违约 必选
ResponseTrailerRemove 标头名称 (无) 是的
什么时候 成功/始终/失败 成功

Config:

{
  "ResponseTrailerRemove": "HeaderName",
  "When": "Success"
}

代码:

routeConfig = routeConfig.WithTransformResponseTrailerRemove(headerName: "HeaderName", ResponseCondition.Success);
transformBuilderContext.AddResponseTrailerRemove(headerName: "HeaderName", ResponseCondition.Success);

示例:

HeaderName: value
AnotherHeader: another-value

这会删除已命名的尾随标头。

ResponseTrailerRemove 遵循与 ResponseHeaderRemove 相同的结构和指导。

ResponseTrailersAllowed

密钥 价值 必选
ResponseTrailersAllowed 以分号分隔的允许标头名称列表。 是的

Config:

{
  "ResponseTrailersAllowed": "Header1;header2"
}

代码:

routeConfig = routeConfig.WithTransformResponseTrailersAllowed("Header1", "header2");
transformBuilderContext.AddResponseTrailersAllowed("Header1", "header2");

YARP 默认从代理响应复制大多数响应预告片(请参阅 ResponseTrailersCopy)。 某些安全模型仅允许代理特定标头。 此转换将禁用 ResponseTrailersCopy,并且仅复制给定标头。 如果未包含在允许列表中,则修改或追加到现有标头的其他转换可能会受到影响。

请注意,默认情况下,某些标头 YARP 不会复制,因为它们特定于连接或其他安全敏感(例如Connection)。 Alt-Svc 将这些标头名称放在允许列表中将绕过该限制,但强烈建议不要这样做,因为它可能会对代理的功能产生负面影响或导致安全漏洞。

示例:

Header1: value1
Header2: value2
AnotherHeader: AnotherValue

仅从代理响应复制“header1”和“header2”。