本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
本主题介绍可以在 TargetEndpoint
和 ProxyEndpoint
配置中设置以控制消息传递和连接行为的传输属性。如需全面了解 TargetEndpoint
和 ProxyEndpoint
配置选项,请参阅 API 代理配置参考文档。
TargetEndpoint 传输属性
TargetEndpoint
配置中的 HTTPTargetConnection
元素定义了一组 HTTP 传输属性。您可以使用这些属性来设置传输级配置。
这些属性在 TargetEndpoint
HTTPTargetConnection
元素中设置,如以下示例配置所示:
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="request.retain.headers">User-Agent,Referer,Accept-Language</Property> <Property name="retain.queryparams">apikey</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
TargetEndpoint 传输属性规范
属性名称 | 默认值 | 说明 |
---|---|---|
allow.post.without.content.length |
false | 允许您发送正文中没有内容的 POST 请求。 |
allow.put.without.content.length |
false | 允许您发送正文中没有内容的 PUT 请求。 |
allow.tls.session.resumption |
true | 如果为 true (默认值),则客户端在与目标建立新连接时重复使用 TLS 会话。如果您不希望重复使用 TLS 会话,请设置为 false 。会话重复使用通常意味着连接时间更短,但某些目标可能不支持会话重复使用或难以使用。 |
keepalive.timeout.millis |
60000 | 连接池中目标连接的连接空闲超时。如果池中的连接处于空闲状态的时间超过指定的限制,则连接会被关闭。 |
connect.timeout.millis |
3000 |
目标连接超时。如果发生连接超时,Apigee 会返回 HTTP |
ignore.allow.header.for.405 |
true |
允许您将 405 状态代码传递回客户端。启用此标志后,Apigee 将返回 405 而不是 502 状态代码。 |
io.timeout.millis |
55000 |
如果在指定的毫秒数内没有数据可供读取,或者在指定的毫秒数内套接字未准备好写入数据,则事务被视为超时。
|
supports.http11 |
true | 如果值为 true 并且客户端发送了 1.1 请求,则也向目标发送 1.1 请求;否则将向目标发送 1.0 请求。 |
use.proxy |
true |
如果 Apigee Hybrid 替换文件包含
如果设置为 |
use.proxy.tunneling |
true |
如果设置为 true,并且代理配置在 Apigee Hybrid 替换文件中指定(如为 API 代理配置转发代理中所述),则目标连接设置为使用指定的隧道。如果目标使用 TLS/SSL,则该属性会被忽略,并且始终使用隧道发送消息。 |
request.streaming.enabled |
false |
默认情况下 ( |
response.streaming.enabled |
false |
默认情况下,HTTP 响应载荷会读取到缓冲区中,并且可对载荷进行操作的政策会按预期工作。如果载荷大于缓冲区大小(在 Apigee 中为 10 MB),您可以将此特性设置为 true。为 true 时,HTTP 响应载荷不会读取到缓冲区中;它们会按原样流式传输到 |
success.codes |
不适用 |
默认情况下,Apigee 会将 HTTP 代码 设置此属性会覆盖默认值。因此,如果您想将 HTTP 代码
如果您想仅将 HTTP 代码
将 HTTP 代码 |
compression.algorithm |
不适用 |
默认情况下,Apigee 遵循系统为接收的消息设置的压缩类型(gzip、deflate 或者不压缩)。例如,如果接收到的客户端请求使用 gzip 压缩,则 Apigee 会使用 gzip 压缩将请求转发给目标。如果从目标收到的响应使用 deflate,则 Apigee 会使用 deflate 将响应转发给客户端。支持的值包括:
|
request.retain.headers. |
true | 默认情况下,Apigee 会始终为出站消息保留所有 HTTP 标头。设置为 true 时,入站请求中的所有 HTTP 标头都会设置在出站请求中。 |
request.retain.headers |
不适用 | 定义应在向目标服务发送的出站请求中设置的来自请求的特定 HTTP 标头。例如,要“传递”User-Agent 标头,请将 request.retain.headers 的值设置为 User-Agent 。以逗号分隔列表的形式指定多个 HTTP 标头,例如 User-Agent,Referer,Accept-Language 。此属性会替换 request.retain.headers.enabled 。如果 request.retain.headers.enabled 设置为 false ,仍然会为出站消息设置 request.retain.headers 属性中指定的任何标头。 |
response.retain.headers. |
true | 默认情况下,Apigee 会始终为出站消息保留所有 HTTP 标头。设置为 true 时,将为出站响应设置来自目标服务的入站响应中的所有 HTTP 标头,然后再将响应传递给 ProxyEndpoint 。 |
response.retain.headers |
不适用 | 定义在发送到 ProxyEndpoint 之前,应为出站响应设置的来自响应的特定 HTTP 标头。例如,要“传递”Expires 标头,请将 response.retain.headers 的值设置为 Expires 。以逗号分隔列表的形式指定多个 HTTP 标头,例如 Expires,Set-Cookie 。此属性会替换 response.retain.headers.enabled 。如果 response.retain.headers.enabled 设置为 false ,仍然会为出站消息设置 response.retain.headers 属性中指定的任何标头。 |
retain.queryparams. |
true | 默认情况下,Apigee 会始终为出站请求保留所有查询参数。设置为 true 时,将为向目标服务发出的出站请求设置入站请求中的所有查询参数。 |
retain.queryparams |
不适用 | 定义要在出站请求中设置的特定查询参数。例如,要包含请求消息中的查询参数 apikey ,请将 retain.queryparams 设置为 apikey 。以逗号分隔列表的形式指定多个查询参数,例如 apikey,environment 。此属性会替换 retain.queryparams.enabled 。 |
ProxyEndpoint 传输属性
ProxyEndpoint
HTTPTargetConnection
元素定义了一组 HTTP 传输属性。这些属性可用于设置传输级配置。
这些属性在 ProxyEndpoint
HTTPProxyConnection
元素中设置,如以下示例配置所示:
<ProxyEndpoint name="default"> <HTTPProxyConnection> <BasePath>/v1/weather</BasePath> <Properties> <Property name="request.streaming.enabled">true</Property> </Properties> </HTTPProxyConnection> </ProxyEndpoint>
请求标头
传入 HTTP 请求包含客户端发送的 HTTP 标头。
如果客户端发送了名称与 X-Apigee-*
格式匹配的标头,则这些标头会从传入请求中移除。Apigee 会预留此名称格式。
ProxyEndpoint 传输属性规范
属性名称 | 默认值 | 说明 |
---|---|---|
X-Forwarded-For |
false | 如果设置为 true,虚拟主机的 IP 地址将作为 HTTP X-Forwarded-For 标头的值添加到出站请求中。 |
request.streaming. |
false |
默认情况下 (false ),HTTP 请求载荷会读取到缓冲区中,并且可对载荷进行操作的政策会按预期工作。如果载荷大于缓冲区大小(在 Apigee 中为 10 MB),您可以将此特性设置为 true 。为 true 时,HTTP 请求载荷不会读取到缓冲区中;它们会按原样流式传输到 TargetEndpoint 请求流。在这种情况下,系统会绕过 ProxyEndpoint 请求流中对载荷进行操作的任何政策。另请参阅流式传输请求和响应。 |
response.streaming. |
false |
默认情况下,HTTP 响应载荷会读取到缓冲区中,并且可对载荷进行操作的政策会按预期工作。如果载荷大于缓冲区大小(在 Apigee 中为 10 MB),您可以将此特性设置为 true 。为 true 时,HTTP 响应载荷不会读取到缓冲区中;它们会按原样流式传输到客户端。在这种情况下,系统会绕过 ProxyEndpoint 响应流中对载荷进行操作的任何政策。另请参阅流式传输请求和响应。 |
compression.algorithm |
不适用 |
默认情况下,Apigee 遵循系统为接收的消息设置的压缩类型(gzip、deflate 或者不压缩)。例如,如果客户端提交使用 gzip 压缩的请求,Apigee 将使用 gzip 压缩将请求转发给目标。您可以通过在
|
api.timeout |
不适用 |
配置单个 API 代理的超时(以毫秒为单位) 您可以配置 API 代理(甚至包括启用了流式处理的代理),使其在指定时间后超时并返回
例如,如需将代理配置为在 180000 毫秒(三分钟)后超时,请将以下属性添加到 <Property name="api.timeout">180000</Property> 您无法使用变量设置此属性。 |
HTTPHeader.allowDuplicates |
不适用 | 使用此设置可允许标头(对于特定标头)重复。 <HTTPProxyConnection> <Properties> <Property name="HTTPHeader.allowDuplicates">Content-Type,Authorization</Property> </Properties> </HTTPProxyConnection> |
HTTPHeader.multiValued |
不适用 | 使用此设置可允许标头(对于特定标头)重复。 <HTTPProxyConnection> <Properties> <Property name="HTTPHeader.multiValued">Content-Type,Authorization</Property> </Properties> </HTTPProxyConnection> |
设置 io.timeout.millis 和 api.timeout
io.timeout.millis
和 api.timeout
的操作是相关的。对于向 API 代理发出的每个请求:
- Ingress(又称为“内部负载均衡器”)将其超时值发送给消息处理器。此超时值默认为 300 秒,不可配置。
- 然后,消息处理器会设置
api.timeout
:- 如果未在代理级别设置
api.timeout
,请使用 Ingress 设置的超时。 - 如果在代理级别设置了
api.timeout
,请在消息处理器上将其设置为 Ingress 超时或api.timeout
的值(以较小值为准)。
- 如果未在代理级别设置
-
api.timeout
的值指定 API 代理从 API 请求到响应的最长执行时间。API 代理中的每个政策执行之后或消息处理器向目标端点发送请求之前,消息处理器会计算(
api.timeout
- 从请求开始流逝的时间)。如果值小于零,则处理该请求的最长时间已过期,消息处理器返回
504 Gateway Timeout
。 -
io.timeout.millis
的值指定目标端点进行响应的最长时间。在连接到目标端点之前,消息处理器会确定(
api.timeout
- 从请求开始流逝的时间)和io.timeout.millis
中的较小值。然后将io.timeout.millis
设置为该值。如果在写入 HTTP 请求或读取 HTTP 响应时发生超时,则返回
504 Gateway Timeout
。