1. 程式人生 > >HTTP Content-Type Accept-Charset Accept-Encoding

HTTP Content-Type Accept-Charset Accept-Encoding

最近在閱讀Okhttp原始碼的時候,遇到了Content-Type:application/x-www-form-urlencoded

其實還有一種常見的編碼格式是application/json

因為自己有一些理解,而且比較懶,所以我不百度了

Content-Type裡的東西就是告訴雙方,資料的格式是怎樣的

資料放在哪呢?可以是在url中,可以是在body裡。

application/x-www-form-urlencoded就是表單格式,

application/json就是json格式,

本質上都是鍵值對,只不過大家的套路不同而已

表單是啥

以前被整的對錶單有點害怕,哇,好牛逼,我不懂欸。。。其實就是一種和json一樣的用於存放鍵值對的資料格式。

聲明瞭Content-Type,就代表告訴了對方,這是怎樣的鍵值對資料格式。對方就按照這種方式去解析了。當然你也可以不宣告,對方可以一種種方式去判斷,判斷到底是啥,這效能損失有點太大了

Accept-Chaset、Accept-Encoding

得先理解整個HTTP協議。

HTTP協議底層到底長啥樣子?其實就是流,編碼格式是utf-8。你把他轉回來,又是一種特殊的資料格式,也是一種類似鍵值對的東西,這就是HTTP特有的資料格式。

然後的東西是我猜測的,body裡的東西仍會進行一次編碼,由accept-charset控制;也就是說你拿到body後要先解碼,目前它是流的形式(解碼注意了,你用什麼字符集轉字元流的,那麼就只能用這種字符集轉回來。然後再進行字元流和位元組流的轉化)。解碼後就得到了比如表單資料格式、json資料格式的資料。

Accept-Encoding則又是在此基礎上的壓縮,常見的有gzip。上面不是已經把應用層的資料,轉化成了鍵值對格式,然後又轉化成位元組流了嗎。現在就是一堆010101的東西了。Accept-Encoding是對位元組流的壓縮,採用比如哈夫曼壓縮演算法,把比如本來100M的位元組流轉化成30M。

所以綜合HTTP的解析,步驟如下:

1.HTTP協議是位元組流,按utf-8解析得到真實文字

2.按照HTTP的鍵值對規範去解析出HTTP的一切到應用層中

3.拿到body

4.解壓縮,超短的位元組流變成原來的超長的位元組流

5.解碼,位元組流按對的編碼格式去解碼,轉成真實文字資料

6.對文字資料按某鍵值對格式進行解析,得到應用層裡的鍵值對

上述是我結合平時看的一些網路框架的原始碼分析出來的,還有待驗證,不過應該八九不離十。

相關推薦

HTTP Content-Type Accept-Charset Accept-Encoding

最近在閱讀Okhttp原始碼的時候,遇到了Content-Type:application/x-www-form-urlencoded 其實還有一種常見的編碼格式是application/json 因為自己有一些理解,而且比較懶,所以我不百度了 Content-

Http Content-Type

data com 文本格式 ima 內容 類型 cat 進行 sdn 常見的媒體格式類型如下: text/html : HTML格式 text/plain :純文本格式 text/xml : XML格式 image

HTTP content-type對照表

副檔名 Content-Type(Mime-Type) 副檔名 Content-Type(Mime-Type) .*( 二進位制流,不知道下載檔案型別) application/oc

http content-type常見檔案格式型別

Content-Type,一般是指網頁中存在的Content-Type,用於定義網路檔案的型別和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個檔案,比如用PHP輸出圖片檔案、JSON資料、XM

我的Android進階之旅------>HTTP Content-type 對照表

 HTTP Content-type 對照表 副檔名 Content-Type(Mime-Type) 副檔名 Content-Type(Mime-Type)    .*( 二進位制流, 不知道下載檔案型別) application/octet-str

HTTP Content-Type(MIME-Type) 與副檔名 Extension 對照表

Content-Type,內容型別,一般是指網頁中存在的Content-Type,用於定義網路檔案的型別和網頁的編碼,決定檔案接收方將以什麼形式、什麼編碼讀取這個檔案,這就是經常看到一些Asp網頁點選的結果卻是下載到的一個檔案或一張圖片的原因。 Content-Typ

三種常見的http content-type詳解

介紹         http協議是建立在tcp/ip協議之上的應用層協議,主要包括三個部分,狀態行,頭部資訊,訊息主體。對應一個http請求就是:請求行,請求頭,請求體。         協議規定post提交的資料,必須包含在訊息主體中entity-body中,但是協議

常用HTTP Content-type頭資訊及檔案型別對照

這東西經常會用得到,我舉個小例子:<?phpheader("Content-Type:text/xml");$Xml='<?xml version="1.0" encoding="utf-8"?><root>  <items>     <item>    

http content-type 對照表(轉載)

An official listing of defined MIME types: .ai - application/postscript .aif - audio/x-aiff .aifc - audio/x-aiff .aiff - audio/x-aiff .asc - text/plain .a

http Content-Type 中的boundary搗亂,導致服務端無法獲取上傳檔案

使用 httpcomponents httpclient 4.3.1 上傳檔案時服務端總是返回“需要可用的引數”,這個結果描述是應用自定義的,太過於籠統,得不到任何有用的資訊。後來和伺服器端一起除錯才找到問題的根源。 客戶端傳送的 http Content-Type: C

HTTP中的Content-TypeAccept

版權宣告:本文為博主原創文章,無需授權即可轉載,甚至無需保留以上版權宣告,轉載時請務必註明作者。 https://blog.csdn.net/weixin_43453386/article/details/83537483 HTTP中的Content-Type和Accept

Spring MVC -- AcceptContent-Type

Rest 請求 請求方式 安全 冪等 介面說明 GET 安全 冪等 獲取資源 PSOT 不安全 非冪等 建立資源 PUT 不安全 冪等 更新資源 DELETE 不安全 冪等 刪除資源 冪等/非冪等 依賴於服務端實現,這種方式是一種

acceptcontent-Type區別

accept表示 客服端(瀏覽器)支援的型別,也是希望伺服器響應傳送回來的的資料型別。 例如:Accept:text/xml; ,也就是希望伺服器響應傳送回來的是xml文字格式的內容 區別: 1.Accept屬於請求頭, Content-Type屬於實體頭。  Http

AcceptContent-Type

alt form 技術分享 協商 int val options ack printing 原文:Accept 與 Content-Type Accept Accept 表示請求方希望的資源類型,或者能

spring mvc3.1 @ResponseBody註解生成大量Accept-Charset

ole converter pre catch 字符 註意 trac rri 註解 Spring3 [email protected]/* */(Accept-Charset會達到4K+)。原因在於默認情況下StringHttpMessageConverte

Spring MVC 前後臺傳遞json格式數據 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

support style logs ica spring enc json格式數據 分享 技術 報錯如下: Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported

tty json proc clas red connect handle pen 沒有 踩到了一個神坑,明明@RequestMapping註解並沒有設置consumes,即沒有限定請求參數的類型。卻出現文章底部的錯誤,原因竟然是同一個model下註解了兩個@JsonBac

2018/06/07 HTTPContent-Type 的作用

php chunk cat 屬性 說明 multipart HR 部分 doctype 在此之前先看一個小例子: <?php var_dump($_FILES);?> <!DOCTYPE html> <html> <hea

Http的那些事: Content-Type

article hba 數據 找不到 oschina dex ria ack null Content-Type 無疑是http中一個非常重要的屬性了, request 中可以存在, 也可以不存在( request的Content-Type 默認是 */*, 實際上呢, 如

Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported for @RequestBody XXX

orm app support ram supported json 重新 使用 rip 問題描述 前端使用ajax發送post請求發送Json數據,spring mvc報Content type ‘application/x-www-form-urlencoded;ch