本頁說明 App Engine 應用程式如何發出 HTTP 和 HTTPS 要求及接收回應。請參閱「發出 HTTP(S) 要求」,查看程式碼範例示範如何從 App Engine 應用程式發出 HTTP 和 HTTPS 要求。
要求
在 App Engine Java 8 執行階段中,您可以使用java.net.URLConnection
抽象類別,以及 Java 標準程式庫中的相關類別,從您的 Java 應用程式建立 HTTP 和 HTTPS 連線。
或者,您也可以使用 App Engine URL Fetch API,該 API 會使用 URL Fetch API 實作 URLConnection
中定義的方法。如要瞭解使用原生 Java 類別與使用 URL Fetch API 的優缺點,請參閱「在 Java 8 中使用標準 Java 呼叫而非 URL Fetch 的優點」。
要求通訊協定
應用程式可使用 HTTP 或 HTTPS 擷取網址。您可查看目標網址中的通訊協定,藉此推測應使用的通訊協定。
待擷取網址可使用下列範圍的任何連接埠號:
80
至90
440
至450
1024
-65535
如果網址中沒有連接埠,則由通訊協定默許連接埠。HTTP 要求發生於連接埠 80
,HTTPS 要求則發生於連接埠 443
。
要求方法
如果您是透過標準 Javajava.net.URLConnection
類別發出要求,則可使用任何支援的 HTTP 方法。如果您是透過網址擷取服務發出要求,則可使用下列任何 HTTP 方法:
GET
POST
PUT
HEAD
DELETE
PATCH
要求可包括 HTTP 標頭;若為 POST
、PUT
和 PATCH
要求,則可包括酬載。
要求 Proxy
請注意,網址擷取服務使用符合 HTTP/1.1 的 Proxy 來擷取結果。
為了防止應用程式造成要求的無限遞迴,要求處理常式無法擷取本身的網址。但是其他方法仍可能造成無限遞迴,因此如果您的應用程式能夠擷取使用者所提供網址的要求,請務必謹慎作業。
要求標頭
應用程式可針對傳出要求設定 HTTP 標頭。
傳送 HTTP POST
要求時,如果 Content-Type
標頭並未明確設定,則標頭會設為 x-www-form-urlencoded
。這是網頁表單使用的內容型別。
基於安全理由,應用程式無法修改下列標頭:
Content-Length
Host
Vary
Via
X-Appengine-Inbound-Appid
X-Forwarded-For
X-ProxyUser-IP
App Engine 會視情況將這些標頭設為正確的值。舉例來說,App Engine 會計算來自要求資料的 Content-Length
標頭,並且先將該標頭新增至要求中,接著再傳送要求。
下列標頭代表發出要求應用程式的應用程式 ID:
User-Agent
。此標頭可修改,但 App Engine 會附加識別碼字串,讓伺服器能識別 App Engine 的要求。附加的字串格式為"AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)"
,其中APPID
是應用程式的識別碼。X-Appengine-Inbound-Appid
。此標頭不可修改;當下列重新導向參數設為False
時,如果透過網址擷取服務傳送要求,系統就會自動新增此標頭。
要求逾時
您可以為要求設定期限或逾時時間。要求的預設逾時時間為 10 秒。HTTP(S) 要求的最大期限是 60 秒,工作佇列和 Cron 工作是 60 秒。將 URLConnection
抽象類別搭配網址擷取使用時,該服務會使用連線逾時 (setConnectTimeout()
),再加上讀取逾時 (setReadTimeout()
) 做為期限。
您可以傳送同步要求和非同步要求。下列行為會套用至 URL Fetch API:
- 「同步要求」:擷取呼叫會等到遠端主機傳回結果,然後再將控制權交還應用程式。如果時間超過擷取呼叫的等待時間上限,該呼叫會引發例外狀況。
- 「非同步要求」:網址擷取服務會開始發出要求,然後立即傳回包含物件的結果。應用程式可以在擷取網址的同時,執行其他工作。當應用程式需要結果時,會呼叫物件上的方法,如果有需要,方法會等候要求完成,然後再傳回結果。在要求處理常式結束時,如果有任何網址擷取要求處於擱置狀態,應用程式伺服器會等到所有其餘要求皆傳回或達到期限,才會將回應傳回給使用者。
安全連線和 HTTPS
您的應用程式可透過 HTTPS 連線到安全的伺服器,以安全的方式擷取網址。要求與回應資料將以加密的形式透過網路傳輸。
如果您是使用 URL Fetch API,請注意 URL Fetch Proxy 不會驗證其所聯繫的主機。使用 HTTPS 時,Proxy 伺服器無法偵測 App Engine 和遠端主機之間的中間人攻擊。您可以使用 URLFetchService
API 中的 FetchOptions
類別啟用主機驗證。
回應
如果您是使用 URL Fetch API,請注意網址擷取服務會傳回包括回應、程式碼、標頭與內文在內的所有回應資料。
根據預設,網址擷取服務如果收到含有重新導向代碼的回應,網址擷取服務將追蹤這個重新導向。該服務會追蹤最多五個重新導向回應,然後傳回最終資源。您可以指示網址擷取服務不要追蹤重新導向連結,而是將重新導向的回應傳回應用程式。
在開發伺服器使用網址擷取
在電腦的 App Engine 開發伺服器執行應用程式時,系統會在本機處理網址擷取服務的呼叫。開發伺服器將直接從您的電腦連線至遠端主機以擷取網址,而網路設定則是您的電腦存取網際網路時所使用的任何網路設定。
在測試應用程式用於擷取網址的功能時,請確認您的電腦能夠存取遠端主機。
網址擷取的配額和限制
在 Java 執行階段中,您可以使用標準 Javajava.net.URLConnection
API 來取代 URLFetch,如此一來就無需考量這些配額和限制注意事項。如要進一步瞭解網址擷取服務的配額,請參閱配額。如要查看應用程式目前的配額使用量,請前往Google Cloud 主控台的「配額詳細資料」頁面。
此外,以下為使用網址擷取服務的限制:
限制 | 上限 |
---|---|
要求大小 | 10 MB |
要求標頭大小 | 16 KB (請注意,這會限制在標頭中所能指定的最大網址長度) |
回應大小 | 32 MB |
最大期限 (要求處理常式) | 60 秒 |
最大期限 (工作佇列和 Cron 工作處理常式) | 60 秒 |
後續步驟
執行程式碼範例,並在發出 HTTP(S) 要求一文中取得指引,瞭解如何從應用程式發出要求。