本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
本主题将学习的内容
阅读本主题后,您将了解以下内容:
- Apigee 中的请求和响应流式传输是什么
- 何时使用请求和响应流式传输
- 如何启用请求和响应流式传输
请求和响应流式传输是什么?
默认情况下,HTTP 流式传输处于停用状态,HTTP 请求和响应载荷会写入内存中的缓冲区,随后由 API 代理流水线进行处理。您可以通过启用流式传输来更改此行为。启用流式传输后,系统将流式传输请求和响应载荷,而无需修改客户端应用(对于响应)和目标端点(对于请求)。
何时应启用流式传输?
如果您的 API 代理处理非常大的请求和/或响应(如需了解大小限制,请参阅我还需要了解流式传输的其他哪些内容?),您可能需要启用流式处理。
我还需要了解流式传输的其他哪些内容?
消息载荷大小上限为 10 MB。在非流式传输的请求和响应中,超过该大小会导致 protocol.http.TooBigBody
错误。
已编码的数据
启用流式传输后,Apigee 不会对请求或响应载荷进行编码或解码,然后再将其发送至连接到 Apigee 的客户端或后端目标服务器。如需了解详情,请参阅 TargetEndpoint 传输属性规范表中的 request.streaming.enabled
和 response.streaming.enabled
所对应的行。
如何启用请求和响应流式传输
如需启用请求流式传输,您需要将 request.streaming.enabled
属性添加到代理软件包中的 ProxyEndpoint 和 TargetEndpoint 定义,并将其设置为 true
。同样,设置 response.streaming.enabled
属性以启用响应流式传输。
您可以在代理的“开发”视图中的 Apigee 界面中找到这些配置文件。如果您是在本地开发,则这些定义文件位于 apiproxy/proxies
和 apiproxy/targets
中。
以下示例展示了如何在 TargetEndpoint 定义中启用请求和响应流式传输。
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="response.streaming.enabled">true</Property> <Property name="request.streaming.enabled">true</Property> <Property name="supports.http10">true</Property> <Property name="request.retain.headers">User-Agent,Referer,Accept-Language</Property> <Property name="retain.queryparams">apikey</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
以下示例展示了如何在 ProxyEndpoint 定义中启用响应和请求流式传输:
<ProxyEndpoint name="default"> <HTTPProxyConnection> <BasePath>/v1/weather</BasePath> <Properties> <Property name="allow.http10">true</Property> <Property name="response.streaming.enabled">true</Property> <Property name="request.streaming.enabled">true</Property> </Properties> </HTTPProxyConnection> </ProxyEndpoint>
如需详细了解如何配置端点定义,请参阅端点属性参考。
相关代码示例
GitHub 上的 API 代理示例易于下载和使用。
具备流式传输功能的示例代理包括:
- 流式传输 - 演示针对 HTTP 流式传输配置的 API 代理。
- Edge Callout:签名网址生成器 - 说明生成签名网址以访问大型文件(而不是尝试在请求/响应中流式传输它们)的最佳做法。