转发请求

适用于:所有 API 管理层级

forward-request 策略将传入请求转发到请求forward-request中指定的后端服务。 后端服务 URL 在 API 设置中指定,可以使用设置后端服务策略进行更改。

重要

  • 需有此策略才能将请求转发到 API 后端。 默认情况下,API 管理会在全局范围设置此策略。
  • 删除此策略会导致请求不会转发到后端服务。 成功完成入站部分中的策略后,将立即评估出站部分中的策略。

注意

按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解如何设置或编辑 API 管理策略

策略语句

<forward-request http-version="1 | 2or1 | 2" timeout="time in seconds (alternatively, use timeout-ms)" | timeout-ms="time in milliseconds (alternatively, use timeout)" continue-timeout="time in seconds" follow-redirects="false | true" buffer-request-body="false | true" buffer-response="true | false" fail-on-error-status-code="false | true"/>

属性

属性 说明 需要 默认
timeout 在引发超时错误之前,等待后端服务返回 HTTP 响应标头的时间量(秒)。 最小值为 0 秒。 大于 240 秒的值可能不会被遵守,因为底层网络基础设施在此时间后可能会丢弃闲置的连接。 允许使用策略表达式。 你可以指定 timeouttimeout-ms,但不能同时指定两者。 300
timeout-ms 在引发超时错误之前,等待后端服务返回 HTTP 响应头的时间量(毫秒)。 最小值为 0 ms。 允许使用策略表达式。 你可以指定 timeouttimeout-ms,但不能同时指定两者。 空值
continue-timeout 在引发超时错误之前,等待后端服务返回 100 Continue 状态代码的时间量(秒)。 允许使用策略表达式。 空值
http-version 在向后端服务发送 HTTP 响应时要使用的 HTTP 规范版本。 在使用 2or1 时,网关将优先使用 HTTP /2 而不是 /1,但如果 HTTP /2 不起作用,则回退到 HTTP /1。 1
follow-redirects 指定是由网关执行从后端服务的重定向,还是将重定向返回到调用方。 允许使用策略表达式。 false
buffer-request-body 设置为 true 时,请求会被缓冲,并会在重试时重新使用。 false
buffer-response 影响分块响应的处理。 如果设置为 false,则从后端接收的每个区块都会立即返回给调用方。 如果设置为 true,则会对区块进行缓冲(8 KB,除非检测到流的末尾),然后再返回给调用方。

使用后端设置为 false,例如那些实现服务器发送事件 (SSE) 的后端,它们需要将内容立即返回或流式传输给调用方。 不允许使用策略表达式。
true
fail-on-error-status-code 设置为 true 时触发 400 到 599(含)范围的响应代码的 on-error 部分。 不允许使用策略表达式。 false

使用情况

示例

将请求发送到 HTTP/2 后端

以下 API 级别策略可将所有 API 请求转发到 HTTP/2 后端服务。

<!-- api level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request http-version="2or1"/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

这是 HTTP /2 或 gRPC 工作负载所必需的,并且目前仅在自承载网关中受支持。 请在 API 网关概述中了解详细信息。

转发带有超时间隔的请求

以下 API 级策略将所有 API 请求都转发到后端服务,超时间隔设置为 60 秒。

<!-- api level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request timeout="60"/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

从父范围继承策略

以下操作级策略使用 base 元素,从父 API 级范围继承后端策略。

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <base/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

不要从父范围继承策略

以下操作级策略显式将所有请求转发到后端服务,超时设置为 120 秒,不继承父 API 级后端策略。 如果后端服务以 400 到 599(含)之间的错误状态代码响应,则将触发 on-error 部分。

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request timeout="120" fail-on-error-status-code="true" />
        <!-- effective policy. note the absence of <base/> -->
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

不要将请求转发到后端

以下操作级策略不将请求转发到后端服务。

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <!-- no forwarding to backend -->
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

后续步骤

有关使用策略的详细信息,请参阅: