--- title: Part 2-1 6.3 通訊協定共同要求事項 tags: 5G 智慧杆系統技術規範 image: --- # 6.3 通訊協定共同要求事項 ## 6.3.1 HTTPS 伺服器端 * a) HTTPS 伺服器端應使用符合 IETF / RFC 5246 規定之 TLS 1.2 或更新版本進行傳輸加密。 若客戶端使用未加密連線時,則應禁止存取。 * b) 應使用憑證機構 (certificate authority, CA) 核發,且未超出期限之有效憑證,存取介面 URI 之域名應能符合憑證登錄項目。 * c) 應對所有連線進行鑑別,未通過鑑別之連線應禁止存取。鑑別方法依後續各節規定。 * d) 通訊協定版本應使用符合 IETF/RFC 2616 規定之 HTTP/1.1 或更新版本,若客戶端使用舊版本連線 (1.0 或更早版本),則應回應狀態碼 ==**426**== (**upgrade required**)。 * e) 若請求封包標頭內容不符合存取介面 URI 之域名或路徑,則應回應狀態碼 ==**404**== ( **not found**)。 * f) 其他未指定之錯誤依一般預設方式處理 (例: ==**503**== **service unavailable**)。 **備考:** HTTPS 客戶端宜具備惡意攻擊偵測能力。若同一 HTTPS 客戶端連續發生相同錯誤,宜限制該客戶端之後續連線。 ## 6.3.2 HTTPS 客戶端: 發送請求 * a) HTTPS 客戶端應使用符合 IETF / RFC 5246 規定之 TLS 1.2 或更新版本進行傳輸加密。 * b) 所有連線應包含鑑別資訊,鑑別資訊之格式、內容及鑑別方法,依後續各節規定。 * c) 通訊協定版本應使用 IETF / RFC 2616 規定之 HTTP/1.1 或更新版本,**Host** 標頭欄位應包含連線標的 URI 之域名。 * d) 連線應為非持續性,**Connection** 標頭欄位內容應為 **close**。 * e) 若請求方法為 **POST**,則請求封包應包含請求本體 (body),內容格式及編碼方式應符合 6.2 規定。封包內應包含 **Content-Type** 標頭欄位,內容應為 **application/json; charset=utf-8**,並使用 **Content-Length** 標頭欄位以標記資料長度。 ## 6.3.3 HTTPS 客戶端: 異常及回應處理 * a) HTTPS 客戶端於發送請求封包後,應等候伺服器端回應。若連線逾時、伺服器端逾時未回應或回應不完整,則應重新發送請求封包至相同 URI。逾時時間依實作而定。 * b) 若回應狀態碼為 ==**429**== (**too many requests**)、==**500**== (**internal server error**)、==**502**== (**bad gateway**)、==**503**== (**service unavailable**) 或 ==**504**== (**gateway timeout**),則應重新發送請求封包至相同 URI。 * c) 若回應狀態碼為 ==**307**== (**temporary redirect**),則應重新發送請求封包至 **Location** 標頭欄位內容指示之 URI。 * d) 其他回應狀態碼之處理方式依後續各節規定,未指定處理方式之狀態碼應視為異常。發生異常時,應停止重新發送請求,後續處理方式依各依後續各節規定。 * e) 重新發送 HTTPS 請求時,應先等候一段時間,再發送包含相同內容之請求封包。若回應封包內包含 **Retry-After** 標頭欄位,則等候時間應符合 **Retry-After** 標頭欄位內容指示。若未收到回應封包或回應封包內未設定 **Retry-After** 標頭欄位,則可由實作自定等候時間,不宜低於 5 秒。 * f) 重新發送 HTTPS 請求時,若連續發生相同錯誤達一定次數時,則應視為異常。重試次數上限可由實作自定。 **備考 1** 除另有規定外,HTTPS 客戶端不處理回應狀態碼 300 至 305 及 308 之重新導向指示。 **備考 2** 發生異常時,實作宜能顯示或記錄該次異常,以利後續除錯作業。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up