最近在調試代碼時發現有Request Payload的情況,從網上查一些文件,也都有較多的描述。下面我只是說明一下大家沒有注意的地方
關於HTTP請求,都是通過URL及參數向后台發送數據。主要方式有GET, POST。對這兩種方式,GET的參數都會放在URL的后面,一般稱之為query參數。POST的都放在HTTP的報文BODY里,可以query參數的形式,也可以multipart格式,還有一種JSON格式,即Request Payload格式。
multipart, Request Payload是通過request Header中的ContentType區分的:
multipart格式:ContentType: multipart/form-data;boundary=--xxxxxxx, 注意對multipart的格式都要有boundary做為BODY中的參數分隔符,(關於該格式的講解以后再寫)
Request Payload格式:ContentType: application/json
在后台的處理中對這三種格式的處理是不相同的。
GET格式都在URL后面,以key1=value1&key2=value2的KV格式存在,且不會很長(協議規定為1024個字節,但現在瀏覽器都會適當加長一些)。后台處理這種參數時可以使用同步處理,因為報文頭收到后參數也就收全了。
POST時參數也可以使用上面的KV格式存在,但是會放在報文體中。當數據量不大時,一般也會和報文頭一起收到。但數據量大的時會被拆分到多個報文中。因此必須使用異步方式收取。收全后處理同GET相同。
對於multipart格式,需要使用流方式邊收邊解析,因為有可能是大文件上傳。
對於RequestPayload格式,可能也是異步發送(這個沒有驗證過),但數據量一般不會太大,因此它是一個JSON格式,因此必須等報文收全后才能處理。目前對JSON格式的支持比較普遍,都有相關的函數來解析JSON字符串,直接生成JSON對象,因此這種方式也是最方便的。特別是使用nodejs server時就可以直接在代碼中使用了。