我想通過http發送大量的json來切斷。使用「內容編碼」:「GZIP」
如果我在我的httpClient中使用「Content-Encoding」:「GZIP」,它會自動將請求主體轉換爲壓縮格式嗎?
我想通過http發送大量的json來切斷。使用「內容編碼」:「GZIP」
如果我在我的httpClient中使用「Content-Encoding」:「GZIP」,它會自動將請求主體轉換爲壓縮格式嗎?
不,RFC 7231描述內容編碼。如果您發送的是Content-Encoding
,則需要確保該編碼中的內容爲。
如果您發送Content-Encoding: gzip
和純文本消息,您將(正確)收到HTTP 400
。 gzip
消息的正文總是以0x1f 0x8b
開頭,如果服務器沒有找到那個int POST請求,這是正確的抱怨。
另一個原因是你需要一個合適的Content-Length
標題。這不會是原始JSON的長度,它必須是壓縮JSON的長度(以字節爲單位)。
在發送任何內容之前,您需要先執行JSON的gzip
,因爲您需要事先知道要在Content-Length
中放置什麼內容。
需要特別注意的是:如果JSON是那麼大(例如幾個千兆字節),你可能需要Transfer-Encoding: chunked
,它自帶了複雜功能。 (你不發送Content-Length
,但增加卡盤的長度,以身體本身。)
如果它自動做到這一點,是100%依賴於你正在使用的HTTP客戶端,如果他們這樣實現。至少在我經常使用的客戶端中,通常設置一個頭文件將會自動編碼它而不是。
a)RFC 2295完全不相關;請參閱RFC 7231。 b)我不知道你爲什麼認爲T-E在這裏是相關的...... –
@JulianReschke - a)你是對的,更新。 b)在POST中允許T-E(據我所知),如果他的JSON很大(對於答案不是嚴格需要,但可能有用),它是OP的一個選項。 – grochmal
當壓縮內容到達標頭爲「Content-Encoding」:「GZIP」的服務器時,服務器是否自動解壓縮它? – user902997