你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:所有 API 管理层级
              forward-request 策略将传入请求转发到请求forward-request中指定的后端服务。 后端服务 URL 在 API 设置中指定,可以使用设置后端服务策略进行更改。
Important
- 需有此策略才能将请求转发到 API 后端。 默认情况下,API 管理会在全局范围设置此策略。
- 删除此策略会导致请求不会转发到后端服务。 成功完成入站部分中的策略后,将立即评估出站部分中的策略。
Note
按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解如何设置或编辑 API 管理策略。
Policy statement
<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"/>
Attributes
| Attribute | Description | Required | Default | 
|---|---|---|---|
| timeout | 在引发超时错误之前,等待后端服务返回 HTTP 响应标头的时间量(秒)。 最小值为 0 秒。 大于 240 秒的值可能不会被遵守,因为底层网络基础设施在此时间后可能会丢弃闲置的连接。 允许使用策略表达式。 你可以指定 timeout或timeout-ms,但不能同时指定两者。 | No | 300 | 
| timeout-ms | 在引发超时错误之前,等待后端服务返回 HTTP 响应头的时间量(毫秒)。 最小值为 0 ms。 允许使用策略表达式。 你可以指定 timeout或timeout-ms,但不能同时指定两者。 | No | N/A | 
| continue-timeout | 在引发超时错误之前,等待后端服务返回 100 Continue状态代码的时间量(秒)。 允许使用策略表达式。 | No | N/A | 
| http-version | 将 HTTP 请求发送到后端服务时要使用的 HTTP 协议版本: - 1:HTTP/1- 2:HTTP/2- 2or1:网关支持 HTTP/2 而非 HTTP/1,但如果 HTTP/2 不起作用,则回退到 HTTP/1。选择网关支持 HTTP/2 出站。 有关详细信息,请参阅 使用情况说明 。 | No | 1 | 
| follow-redirects | 指定是由网关执行从后端服务的重定向,还是将重定向返回到调用方。 允许使用策略表达式。 | No | false | 
| buffer-request-body | 设置为 true时,请求会被缓冲,并会在重试时重新使用。 | No | false | 
| buffer-response | 影响分块响应的处理。 如果设置为 false,则从后端接收的每个区块都会立即返回给调用方。 如果设置为true,则会对区块进行缓冲(8 KB,除非检测到流的末尾),然后再返回给调用方。使用后端设置为 false,例如那些实现服务器发送事件 (SSE) 的后端,它们需要将内容立即返回或流式传输给调用方。 不允许使用策略表达式。 | No | true | 
| fail-on-error-status-code | 设置为 true时触发 400 到 599(含)范围的响应代码的 on-error 部分。  不允许使用策略表达式。 | No | false | 
Usage
Usage notes
- 使用 - http-version特性启用从网关到后端的 HTTP/2 协议出站。 将属性- 2or1设置为或- 2。 目前,自承载网关和 v2 网关的预览版支持 HTTP/2 出站。- Important - 在 v2 网关中,支持 HTTP/2 入站到 API 管理网关,并从网关出站到后端,但不支持端到端。 目前,v2 网关将传入的 HTTP/2 连接降级到 HTTP/1,然后再将请求转发到后端。 
Examples
将请求发送到 HTTP/2 后端
以下 API 级别策略可将所有 API 请求转发到 HTTP/2 后端服务。 例如,使用此策略可将来自自承载网关的请求转发到 gRPC 后端。
<!-- api level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request http-version="2or1"/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>
转发带有超时间隔的请求
以下 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>
Related policies
Related content
有关使用策略的详细信息,请参阅:
- 教程:转换和保护 API
- 策略参考,其中提供了策略语句及其设置的完整列表
- Policy expressions
- 设置或编辑策略
- 重复使用策略配置
- 策略片段存储库
- 策略场存储库
- Azure API 管理策略工具包
- 获取 Copilot 帮助以创建、解释策略和排查策略问题