概念:
payload,翻譯過來是有效載荷
payload 字面意思“有效載荷,有效負荷,有效載重”。
要解釋什么是有效載重,用貨運行業打個比方:
比如有一位客戶需要支付一筆費用委托貨車司機運送一車石油,石油本身的重量、車子的重量、司機的重量等等,這些都屬於載重(load)。
但是對於該客戶來說,他關心的只有石油的重量,所以石油的重量是有效載重(payload,也就是付費的重量)。
所以抽象一下,payload 可以理解為一系列信息中最為關鍵的信息。
對於程序員來說就是在程序中 起關鍵作用的代碼。
回到代碼中,舉一個最簡單的例子,一個 ajax 請求返回一個 JSON 格式
{ status: 200, hasError: false, data: { userId: 1, name: 'undefined' } }
這里的 data
就是 payload,也就是關鍵信息。而 status
、hasError
等信息是load
,雖然也是信息,但相對沒有那么重要。
安全方面:
通常在傳輸數據時,為了使數據傳輸更可靠,要把原始數據分批傳輸,並且在每一批數據的頭和尾都加上一定的輔助信息,
比如數據量的大小、校驗位等,這樣就相當於給已經分批的原始數據加一些外套,這些外套起標示作用,使得原始數據不易丟失,
一批數據加上“外套”就形成了傳輸通道的基本傳輸單元,叫做數據幀或數據包,而其中的原始數據就是payload
應用:
后台要想從Request Payload中得到自己想要的數據,就要從流中來獲取數據,具體的代碼為
private String getStringFromStream(HttpServletRequest req) { ServletInputStream is; try { is = req.getInputStream(); int nRead = 1; int nTotalRead = 0; byte[] bytes = new byte[10240]; while (nRead > 0) { nRead = is.read(bytes, nTotalRead, bytes.length - nTotalRead); if (nRead > 0) nTotalRead = nTotalRead + nRead; } String str = new String(bytes, 0, nTotalRead, "utf-8"); return str; } catch (IOException e) { e.printStackTrace(); return ""; } }