在http請求中,我們每天都在使用content-type來指定不同格式的請求資訊,但是卻很少有人去全面了解content-type中允許的值有多少,因此這裡來了解一下content-type的可用值,以及在spring mvc中如何使用它們來對映請求資訊。
什麼是content-type
要知道什麼是content-type,首先要了解什麼是internet media type。internet media type即網際網路**型別,也叫做mime型別,使用兩部分識別符號來確定乙個型別。在http協議訊息頭中,使用content-type來表示具體請求中的**型別資訊,意思就是說,content-type是internet media type在http協議中的別稱。
type/subtype(;parameter)? type
上面是content-type的格式,可以拆解為三個部分,分別是主型別(type)、子型別(subtype)和引數(parameter)。
主型別(type)
主型別可以是任意的字串,比如text。如果是*號則代表所有型別。
子型別(subtype)
子型別可以是任意的字串,比如html。如果是*號則代表所有型別。
引數(parameter)
引數是可選的,可以在content-type中加入一些特殊的引數,比如accept請求頭的引數,常見的有用於設定字元編碼的charset引數。
content-type: text/html;charset:utf-8;
content-type中常見的**格式型別
以text開頭的**格式型別:
text/html: html格式。
text/plain:純文字格式。
text/xml: xml格式。
以image開頭的**格式型別:
另外還有一種常見的**格式是上傳檔案之時使用的:
multipart/form-data : 需要在表單中進行檔案上傳時,就需要使用該格式。
以上就是我們在日常的開發中,經常會用到的若干content-type的內容格式。
@target()
@retention
(retentionpolicy.runtime)
@documented
public @inte***ce
; requestmethod[
]method()
default
; string[
]params()
default
; string[
]headers()
default
; string[
]consumes()
default
; string[
]produces()
default
;}
下面對註解提供的引數進行簡單解析。method: 指定請求的method型別, 比如get、post、put、delete等。
produces:指定返回的內容型別,僅當request請求頭中的(accept)型別中包含該指定型別才返回。
params:指定request中必須包含某些引數值,才讓該方法處理。
headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。
其中,consumes、produces可以使用content-type中的資訊對不需要的資訊進行過濾,僅接受需要的資料;headers則可以使用content-type中的資訊對請求進行過濾和判斷。
這裡列舉出request headers(請求頭)和response headers(響應頭)中的候選屬性。
request headers的候選屬性
可以看到,content-type是request headers中的乙個候選屬性。
response headers的候選屬性
具體使用示例
這裡通過幾個具體的例項來了解怎麼在spring mvc中使用兩個headers中的資訊。
示例1:headers屬性取request headers中的referer屬性。
(value =
"/yanggb2"
, method = requestmethod.get, headers=
"referer="
)public
void
yanggb2()
這裡的headers裡面可以匹配所有headers裡面可以出現的資訊,不侷限於referer資訊。
示例2:headers屬性取request headers中的accept屬性。
當你有如下accept頭,將遵守如下規則進行應用:
引數為**型別的質量因子,越大則優先權越高(從0到1)。
③accept:/,text/*,text/html
將按照如下順序進行produces的匹配 ①text/html ②text/* ③*/*。
即匹配規則為:最明確的優先匹配。
示例3:params屬性取引數。
(value =
"/yanggb/"
, method = requestmethod.get, params =
"yanggb1=yanggb2"
)public
void
finduser
(@pathvariable string userid)
在上面的**中,就起到了乙個過濾的作用。
例項4:consumes/produces屬性過濾請求。
@controller
(value =
"/users"
, method = requestmethod.post, consumes=
, produces =
)@responsebody
public list
adduser
(@requestbody user userl)
HTTP請求頭中的長連線和短連線詳解
專案中,發現乙個問題,有的文字顯示不全,顯示一半就結束了,然後,我看響應頭,發現狀態碼為200的響應頭有transfer encoding chunked。顯示不全的請求中,沒有這個header,所以我懷疑是不是這個問題導致的。因為瀏覽器可以通過 content length 的長度資訊,判斷出響應...
Http訊息頭中常用的請求頭和響應頭
常用標準請求頭欄位 host 設定伺服器網域名稱和tcp埠號,如果使用的是服務請求標準埠號,埠號可以省略 host en.wikipedia.org 8080 host en.wikipedia.org if match 設定客戶端的etag,當時客戶端etag和伺服器生成的etag一致才執行,適用...
http頭中的host欄位詳解
host 客戶端指定自己想訪問的http伺服器的網域名稱 ip 位址和埠號。今天同事問了乙個問題引發了我對http頭中host欄位的詳細思考,總結了以下5條。1.host欄位可以是網域名稱,也可以是ip位址。host欄位網域名稱 ip後可以跟埠號,如host www.6san.com 8080 2....