端點屬性參考資料

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

本主題說明可在 TargetEndpoint 和 ProxyEndpoint 設定中設置的傳輸屬性,以便控管訊息傳遞和連線行為。如需 TargetEndpoint 和 ProxyEndpoint 設定的完整涵蓋範圍,請參閱 API Proxy 設定參考資料

TargetEndpoint 傳輸屬性

TargetEndpoint 設定中的 HTTPTargetConnection 元素可定義一組 HTTP 傳輸屬性。您可以使用這些屬性來設置傳輸層級設定。

您可以在 TargetEndpoint HTTPTargetConnection 元素上設定屬性,如下所示:

<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="supports.http10">true</Property>
      <Property name="request.retain.headers">User-Agent,Referer,Accept-Language</Property>
      <Property name="retain.queryparams">apikey</Property>
    </Properties>
    <CommonName>COMMON_NAME_HERE</CommonName>
  </HTTPTargetConnection>
</TargetEndpoint>

TargetEndpoint 傳輸屬性規格

資源名稱 預設值 說明
keepalive.timeout.millis 60000 連線集區中目標連線的連線閒置逾時。如果集區中的連線閒置超過指定限制,系統就會關閉連線。
connect.timeout.millis

3000

目標連線逾時。如果連線逾時,邊緣會傳回 HTTP 503 狀態碼。

io.timeout.millis 55000

如果指定的毫秒數沒有資料可供讀取,或是通訊端尚未準備好寫入指定的毫秒數資料,系統就會將交易視為逾時。

  • 如果寫入 HTTP 要求時發生逾時,系統會傳回 408, Request Timeout
  • 如果讀取 HTTP 回應時發生逾時,會傳回 504, Gateway Timeout

這個值應一律小於 虛擬主機的 Proxy_read_timeout 屬性值。

這個值應小於路由器用於與訊息處理器通訊的逾時時間。詳情請參閱「設定路由器逾時」。

詳情請參閱「為 Edge 設定 io.timeout.millis 和 api.timeout」相關說明。

supports.http10 true 如果這是 true,且用戶端傳送 1.0 要求,目標也會傳送 1.0 要求。否則,系統會將 1.1 要求傳送至目標。
supports.http11 true 如果這是 true,且用戶端傳送 1.1 要求,目標也會傳送 1.1 要求;否則,系統會將 1.0 要求傳送至目標。
use.proxy true 如果設為 true,且 http.properties 中指定了 Proxy 設定 (僅限地端部署部署),則目標連線會設為使用指定的 Proxy。
use.proxy.tunneling true 如果設為 true,並在 http.properties 中指定 Proxy 設定 (僅限地端部署部署作業),則目標連線會設為使用指定的通道。如果目標使用 TLS/SSL,系統會忽略這個屬性,訊息也會一律透過通道傳送。
enable.method.override false 針對指定的 HTTP 方法,在向目標服務的傳出要求上設定 X-HTTP-Method-Override 標頭。例如,<Property name="GET.override.method">POST</Property>
*.override.method 不適用 對於指定的 HTTP 方法,請在傳出要求上設定 X-HTTP-Method-Override 標頭。例如,<Property name="GET.override.method">POST</Property>
request.streaming.enabled false

根據預設 (false),HTTP 要求酬載會讀取到緩衝區,以及可如預期對酬載工作運作的政策。如果酬載大於緩衝區大小 (10 MB),您可以將這項屬性設為 true。如果為 true,則 HTTP 要求酬載不會讀取到緩衝區,而是依原樣串流至目標端點。在此情況下,系統會略過在 TargetEndpoint 要求流程中對酬載運作的任何政策。另請參閱串流要求與回應

response.streaming.enabled false

根據預設 (false),HTTP 回應酬載會讀取到緩衝區,以及可如預期對酬載工作運作的政策。如果酬載大於緩衝區大小 (10 MB),您可以將這項屬性設為 true。如果為 true,HTTP 回應酬載不會讀取到緩衝區,而是依原樣串流至 ProxyEndpoint 回應流程。在這種情況下,系統會略過在 TargetEndpoint 回應流程中對酬載運作的所有政策。另請參閱串流要求與回應一文。

success.codes 不適用

根據預設,Apigee Edge 會將 HTTP 代碼 4XX5XX 視為錯誤,並將 HTTP 代碼 1XX2XX3XX 視為成功。這個屬性可明確定義成功代碼,例如 2XX, 1XX, 505 會將任何 100200505 HTTP 回應代碼視為成功。

設定這個屬性會覆寫預設值。因此,如要將 HTTP 代碼 400 加入預設成功代碼清單,請將這個屬性設為:

<Property name="success.codes">1XX,2XX,3XX,400</Property>

如果只想將 HTTP 代碼 400 視為成功代碼,請將屬性設為:

<Property name="success.codes">400</Property>

將 HTTP 代碼 400 設為唯一成功代碼之後,系統會將 1XX2XX3XX 代碼視為失敗。

compression.algorithm 不適用 根據預設,Apigee Edge 會使用與用戶端要求相同的壓縮類型將要求轉送至目標。如果透過 gzip 壓縮等方式從用戶端收到要求,Apigee Edge 會使用 gzip 壓縮將要求轉送至目標。如果目標收到的回應使用延遲,Apigee Edge 會透過延遲將回應轉送至用戶端。支援的值如下:
  • gzip:一律使用 gzip 壓縮傳送訊息
  • deflate:一律使用定義壓縮功能傳送訊息
  • none:一律傳送訊息,但不壓縮

另請參閱: Apigee 是否支援使用 GZIP/Deflate 壓縮功能進行壓縮/解壓縮?

request.retain.headers.
enabled
true 根據預設,Apigee Edge 一律會保留外寄郵件的所有 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.
enabled
true 根據預設,Apigee Edge 一律會保留外寄郵件的所有 HTTP 標頭。設為 true 時,來自目標服務傳入回應中的所有 HTTP 標頭,都會先在傳出回應中設定,然後再傳送至 ProxyEndpoint。
response.retain.headers 不適用 從回應中定義特定的 HTTP 標頭,標頭在傳送至 ProxyEndpoint 之前應在傳出回應中設定。舉例來說,如要將 Expires 標頭傳遞,請將 response.retain.headers 的值設為 Expires。以半形逗號分隔的清單形式指定多個 HTTP 標頭,例如 Expires,Set-Cookie。這個屬性會覆寫 response.retain.headers.enabled。如果將 response.retain.headers.enabled 設為 false,系統仍會在傳出訊息中設定 response.retain.headers 屬性中指定的所有標頭。
retain.queryparams.
enabled
true 根據預設,Apigee Edge 一律會保留傳出要求的所有查詢參數。設為 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>
    <VirtualHost>default</VirtualHost>
    <VirtualHost>secure</VirtualHost>
  </HTTPProxyConnection>
</ProxyEndpoint>

如要進一步瞭解虛擬主機,請參閱「關於虛擬主機」。

ProxyEndpoint 傳輸屬性規格

資源名稱 預設值 說明
X-Forwarded-For false 如果設為 true,系統會將虛擬主機的 IP 位址加入傳出要求,做為 HTTP X-Forwarded-For 標頭的值。
request.streaming.
enabled
false 根據預設 (false),HTTP 要求酬載會讀取到緩衝區中,以及可如預期對酬載工作運作的政策。如果酬載大於緩衝區大小 (10 MB),您可以將這項屬性設為 true。如果為 true,則 HTTP 要求酬載不會讀取到緩衝區,而是依原樣串流至 TargetEndpoint 要求流程。在此情況下,系統會略過在 ProxyEndpoint 要求流程中對酬載作業的任何政策。另請參閱串流要求與回應
response.streaming.
enabled
false 根據預設 (false),HTTP 回應酬載會讀取到緩衝區,以及可如預期對酬載工作運作的政策。如果酬載大於緩衝區大小 (10 MB),您可以將這項屬性設為 true。如果為 true,HTTP 回應酬載不會讀取到緩衝區,而是依原樣串流至用戶端。在這種情況下,系統會略過在 ProxyEndpoint 回應流程中對酬載運作的任何政策。另請參閱串流要求與回應
compression.algorithm 不適用

根據預設,Apigee Edge 會遵循為收到的所有訊息所設定的壓縮類型。舉例來說,在用戶端提交使用 gzip 壓縮的要求時,Apigee Edge 會使用 gzip 壓縮將要求轉送至目標。您可以在 TargetEndpoint 或 ProxyEndpoint 上設定這個屬性,將壓縮演算法設為明確套用。支援的值如下:

  • gzip:一律使用 gzip 壓縮傳送訊息
  • deflate:一律使用定義壓縮功能傳送訊息
  • none:一律傳送訊息,但不壓縮

另請參閱: Apigee 是否支援使用 GZIP/Deflate 壓縮功能進行壓縮/解壓縮?

api.timeout 不適用

設定個別 API Proxy 的逾時時間

您可以對 API Proxy 設定 (即使是已啟用串流者) 設為在經過指定時間後逾時並處於 504 Gateway Timeout 狀態。主要用途是給 API Proxy 執行時間較長的客戶。舉例來說,假設您需要在 3 分鐘時逾時。以下是您使用 api.timeout 的方式。

  1. 首先,請務必將負載平衡器、路由器和訊息處理器設為逾時時間「之後」三分鐘。
  2. 接著將相關 Proxy 設為在 3 分鐘時逾時。請以毫秒為單位指定值。例如:<Property name="api.timeout">180000</Property>
  3. 不過請注意,提高系統逾時可能會導致效能問題,因為所有沒有 api.timeout 設定的 Proxy 都會使用新設的負載平衡器、路由器和訊息處理器逾時。因此,您可以設定其他不需要較長的逾時時間的 API Proxy,藉此使用較短的逾時時間。例如,下列指令會設定 API Proxy 在 1 分鐘後逾時:
    <Property name="api.timeout">60000</Property>

無法使用變數設定這個屬性。

無法修改 Edge 逾時的客戶,也可以設定 API Proxy 逾時,前提是逾時時間短於標準 Edge 訊息處理工具的逾時時間 (57 秒)。

詳情請參閱「為 Edge 設定 io.timeout.millis 和 api.timeout」相關說明。

設定 Edge 的 io.timeout.millis 和 api.timeout

在邊緣,io.timeout.millisapi.timeout 的作業彼此相關。針對每個傳送至 API Proxy 的要求:

  1. 路由器會將逾時值傳送至訊息處理器。路由器逾時值可以是處理要求的虛擬主機設定的 proxy_read_timeout 值,或預設的逾時值 (57 秒)。
  2. 接著,訊息處理器會設定 api.timeout
    1. 如果「沒有」在 Proxy 層級設定 api.timeout,請設為路由器逾時。
    2. 如果 api.timeout 是設為 Proxy 層級,請在訊息處理器上將其設為路由器逾時時間較低的或 api.timeout 值。
  3. api.timeout 值會指定 API Proxy 從 API 要求對回應執行的最長時間。

    執行 API Proxy 中的每項政策後,或在訊息處理器將要求傳送至目標端點之前,訊息處理器便會計算費用 (api.timeout - 從要求開始以來所經過的時間)。如果值小於零,則處理要求的時間上限已過,且訊息處理器會傳回 504

  4. io.timeout.millis 值會指定目標端點所需的回應時間上限。

    在連線至目標端點之前,訊息處理器會判斷 (api.timeout - 從要求開始後所經過的時間) 和 io.timeout.millis 中的較短時間。然後將 io.timeout.millis 設為該值。

    • 如果寫入 HTTP 要求時發生逾時,系統會傳回 408, Request Timeout
    • 如果讀取 HTTP 回應時發生逾時,會傳回 504, Gateway Timeout

關於 Node.js 應用程式的 ScriptTarget

ScriptTarget 元素用於將 Node.js 應用程式整合至 Proxy。如要瞭解如何使用 Node.js 和 ScriptTarget,請參閱:

關於 HostedTarget 端點

空白的 <HostedTarget/> 標記會指示 Edge 使用已部署至代管目標環境的 Node.js 應用程式。詳情請參閱代管目標總覽