本頁內容適用於 Apigee 和 Apigee Hybrid。
  
    查看 
    Apigee Edge 說明文件。
  
  
       
 
  
本主題說明可在 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="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(預設) 用戶端在建立與目標的新連線時,會重複使用 TLS 工作階段。如不想重複使用 TLS 工作階段,請設為false。一般來說,工作階段重複使用可縮短連線時間,但部分目標可能不支援或難以重複使用工作階段。 | 
| keepalive.timeout.millis | 60000 | 連線集區中目標連線的連線閒置逾時時間。如果集區中的連線閒置時間超過指定限制,連線就會關閉。 | 
| connect.timeout.millis | 3000 | 目標連線逾時。如果發生連線逾時,Apigee 會傳回 HTTP  | 
| ignore.allow.header.for.405 | 是 | 可將 405 狀態碼傳回給用戶端。啟用這個標記後,Apigee 會傳回 405 狀態碼,而非 502。 | 
| io.timeout.millis | 55000 | 如果在指定毫秒數內沒有資料可供讀取,或是插座在指定毫秒數內無法寫入資料,交易就會視為逾時。 
 | 
| supports.http11 | 是 | 如果這是 true,且用戶端傳送1.1要求,目標也會收到1.1要求,否則目標會收到1.0要求。 | 
| use.proxy | 是 | 
            如果 Apigee Hybrid 覆寫檔案包含  
            如果設為  | 
| use.proxy.tunneling | 是 | 如果設為 true,且已在 Apigee Hybrid 覆寫檔案中指定 Proxy 設定 (如「為 API Proxy 設定轉送 Proxy」一文所述),則目標連線會設為使用指定的通道。如果目標使用 TLS/SSL,系統會忽略這項屬性,並一律透過通道傳送訊息。 | 
| response.payload. | 10M | 預設值 ( 10M)。使用response.payload.parse.limit屬性設定回應流程中可處理的酬載大小上限 (以 MB 為單位)。可設定的最小限制為 10M,最大限制為 30M。如未設定這項屬性,預設限制為 1000 萬。另請參閱訊息酬載大小。 | 
| request.streaming.enabled | false | 根據預設 ( | 
| response.streaming.enabled | false | 根據預設 (false),HTTP 回應負載會讀取至緩衝區,且可對負載執行的政策會正常運作。如果酬載大於緩衝區大小 (在 Apigee 中為 10 MB),您可以將這個屬性設為 true。如果為 true,系統不會將 HTTP 回應負載讀取至緩衝區,而是直接串流至  | 
| success.codes | 不適用 | 根據預設,Apigee 會將 HTTP 程式碼  設定這項屬性會覆寫預設值。因此,如要將 HTTP 程式碼  
 如果只希望將 HTTP 代碼  
 將 HTTP 代碼  | 
| compression.algorithm | 不適用 | 根據預設,Apigee 會遵守所設的訊息壓縮類型 (gzip、deflate 或 none)。如果要求是從用戶端收到,且使用 gzip 壓縮等方式,Apigee 會使用 gzip 壓縮將要求轉送至目標。如果從目標收到的回應使用 deflate,Apigee 會使用 deflate 將回應轉送給用戶端。支援的值如下: 
 | 
| request.retain.headers. | 是 | 根據預設,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. | 是 | 根據預設,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. | 是 | 根據預設,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要求流程中對酬載執行的任何政策。另請參閱「串流要求和回應」。 | 
| request.payload. | 10M | 預設值 ( 10M)。使用request.payload.parse.limit屬性設定要求流程中可處理的酬載大小上限 (以 MB 為單位)。可設定的最小限制為 10M,最大限制為 30M。如未設定這項屬性,預設限制為 1000 萬。另請參閱訊息酬載大小。 | 
| response.streaming. | false | 根據預設 (false),HTTP 回應負載會讀取至緩衝區,且可對負載執行的政策會正常運作。如果酬載大於緩衝區大小 (在 Apigee 中為 10 MB),您可以將這個屬性設為 true。如果是true,HTTP 回應負載不會讀取到緩衝區,而是會以串流形式原封不動地傳送至用戶端。在這種情況下,系統會略過在ProxyEndpoint回應流程中對酬載執行的任何政策。另請參閱「串流要求和回應」。 | 
| compression.algorithm | 不適用 | 根據預設,Apigee 會遵守收到的訊息所設定的壓縮類型 (gzip、deflate 或 none)。舉例來說,如果用戶端提交的要求使用 gzip 壓縮,Apigee 會使用 gzip 壓縮將要求轉送至目標。您可以在  
 | 
| api.timeout | 不適用 | 設定個別 API Proxy 的逾時時間 (以毫秒為單位) 您可以設定 API Proxy (包括啟用串流的 Proxy),在指定時間後以  
            舉例來說,如要將 Proxy 設定為在 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 Proxy 提出要求時:
  
- Ingress (又稱內部負載平衡器) 會將逾時值傳送至訊息處理器。 這個逾時值預設為 300 秒,且無法設定。
- 訊息處理器隨後會設定 api.timeout:- 如果api.timeout未在 Proxy 層級設定,請使用 Ingress 設定的逾時。
- 如果 api.timeout是在 Proxy 層級設定,請在 Message Processor 上將其設為 Ingress 超時或api.timeout值中較小的值。
 
- 如果
- 
      api.timeout的值指定 API 代理程式從 API 要求到回應的執行時間上限。API Proxy 中的每項政策執行完畢後,或訊息處理器將要求傳送至目標端點前,訊息處理器會計算 ( api.timeout- 要求開始經過的時間)。如果值小於零,表示處理要求的最長時間已過,訊息處理器會傳回 504 Gateway Timeout。
- 
      io.timeout.millis的值會指定目標端點必須回應的時間上限。在連線至目標端點前,訊息處理器會判斷 ( api.timeout- 請求開始經過的時間) 和io.timeout.millis兩者中較小的值。然後將io.timeout.millis設為該值。如果在寫入 HTTP 要求或讀取 HTTP 回應時發生逾時,系統會傳回 504 Gateway Timeout。