HTTP_POST請求的數據格式

HTTP_POST請求的數據格式

在HTTP的請求頭中,可使用Content-type來指定不一樣格式的請求信息。javascript

Content-type的類型

常見的媒體格式類型:html

  •     text/html : HTML格式
  •     text/plain :純文本格式      
  •     text/xml :  XML格式
  •     image/gif :gif圖片格式    
  •     image/jpeg :jpg圖片格式 
  •     image/png:png圖片格式

以applicaton開頭的沒提類型:java

  • application/json    : JSON數據格式
  • application/xhtml+xml :XHTML格式
  • application/xml     : XML數據格式
  • application/atom+xml  :Atom XML聚合格式    
  • application/pdf       :pdf格式  
  • application/javascript :js格式
  • application/msword  : Word文檔格式
  • application/octet-stream : 二進制流數據(如常見的文件下載)
  • application/x-www-form-urlencoded :form表單默認的數據格式類型,form表單數據被編碼爲key/value格式發送到服務器。

另一種常見的媒體格式是上傳文件之時使用的:web

  • multipart/form-data : 須要在表單中進行文件上傳時,就須要使用該格式。

除了原生的content-type,開發人員也能夠徹底自定義數據提交格式!chrome

最經常使用的三種:json

  1. application/x-www-form-urlencoded,form表單默認的數據格式,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼。大部分服務端語言都對這種方式有很好的支持。好比下面的http請求格式:瀏覽器

    # Request Headers
    POST /adduser HTTP/1.1
    Host: localhost:8030
    Connection: keep-alive
    Content-Length: 16
    Pragma: no-cache
    Cache-Control: no-cache
    Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
    Content-Type: application/x-www-form-urlencoded
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
    
    # Form Data
    name=name&age=11
  2. application/json,如今愈來愈多的人把它做爲請求頭,用來告訴服務端消息主體是序列化後的 JSON 字符串。服務端語言也有不少函數去解析JSON,使用JSON能夠支持更加複雜的結構化數據。好比下面的http請求格式:緩存

    # Request Headers
    POST /adduser HTTP/1.1
    Host: localhost:8030
    Connection: keep-alive
    Content-Length: 24
    Pragma: no-cache
    Cache-Control: no-cache
    Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
    Content-Type: application/json
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
    
    # Request Payload
    {"name":"121","age":121}
  3. multipart/form-data,對用於在表單中上傳文件時,也能夠上傳普通數據,只須要讓from的ectyle等於multipart/form-data就能夠了。好比下面的http請求格式:服務器

    # Request Header
    POST /adduser HTTP/1.1
    Host: localhost:8030
    Connection: keep-alive
    Content-Length: 232
    Pragma: no-cache
    Cache-Control: no-cache
    Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBRi81vNtMyBL97Rb
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
    
    # Request Payload
    ------WebKitFormBoundaryBRi81vNtMyBL97Rb
    Content-Disposition: form-data; name="name"
    
    name1
    ------WebKitFormBoundaryBRi81vNtMyBL97Rb
    Content-Disposition: form-data; name="age"
    
    12
    ------WebKitFormBoundaryBRi81vNtMyBL97Rb--

    這種格式的數據會有一個邊界線boundary(這裏就是------WebKitFormBoundaryBRi81vNtMyBL97Rb)用於分割不一樣的字段,爲了不與正文內容重複,boundary很長很複雜。消息主體以boundary開始,緊接着就是內容描述信息,而後是回車,最後是字段具體的內容(文本或二進制)。若是傳輸的是文件,還要包含文件名和文件類型信息。消息主體以boundary結束。cookie

Request Headers部分各個字段的功能

經過上面的例子,咱們能夠看到在Request Headers裏面之後不少字段,好比Content-type,Host這些,那麼這些字段又有什麼意思呢,下面經過表格來介紹一下:

Header 解釋 示例
Accept 指定客戶端可以接收的內容類型 Accept: text/plain, text/html,*/*
Accept-Charset 瀏覽器能夠接受的字符編碼集。 Accept-Charset: iso-8859-5
Accept-Encoding 指定瀏覽器能夠支持的web服務器返回內容壓縮編碼類型。 Accept-Encoding: compress, gzip
Accept-Language 瀏覽器可接受的語言 Accept-Language: en,zh
Accept-Ranges 能夠請求網頁實體的一個或者多個子範圍字段 Accept-Ranges: bytes
Authorization HTTP受權的受權證書 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 指定請求和響應遵循的緩存機制 Cache-Control: no-cache
Connection 表示是否須要持久鏈接。(HTTP 1.1默認進行持久鏈接) Connection: keep-alive
Cookie HTTP請求發送時,會把保存在該請求域名下的全部cookie值一塊兒發送給web服務器。 Cookie: $Version=1; Skin=new;
Content-Length 請求的內容長度 Content-Length: 348
Content-Type 請求的與實體對應的MIME信息 Content-Type: application/x-www-form-urlencoded
Date 請求發送的日期和時間 Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect 請求的特定的服務器行爲 Expect: 100-continue
From 發出請求的用戶的Email From: user@email.com
Host 指定請求的服務器的域名和端口號 Host: www.zcmhi.com
If-Match 只有請求內容與實體相匹配纔有效 If-Match: 「737060cd8c284d8af7ad3082f209582d」
If-Modified-Since 若是請求的部分在指定時間以後被修改則請求成功,未被修改則返回304代碼 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match 若是內容未改變返回304代碼,參數爲服務器先前發送的Etag,與服務器迴應的Etag比較判斷是否改變 If-None-Match: 「737060cd8c284d8af7ad3082f209582d」
If-Range 若是實體未改變,服務器發送客戶端丟失的部分,不然發送整個實體。參數也爲Etag If-Range: 「737060cd8c284d8af7ad3082f209582d」
If-Unmodified-Since 只在實體在指定時間以後未被修改才請求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards 限制信息經過代理和網關傳送的時間 Max-Forwards: 10
Pragma 用來包含實現特定的指令 Pragma: no-cache
Proxy-Authorization 鏈接到代理的受權證書 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range 只請求實體的一部分,指定範圍 Range: bytes=500-999
Referer 先前網頁的地址,當前請求網頁緊隨其後,即來路 Referer: http://www.zcmhi.com/archives...
TE 客戶端願意接受的傳輸編碼,並通知服務器接受接受尾加頭信息 TE: trailers,deflate;q=0.5
Upgrade 向服務器指定某種傳輸協議以便服務器進行轉換(若是支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-Agent User-Agent的內容包含發出請求的用戶信息 User-Agent: Mozilla/5.0 (Linux; X11)
Via 通知中間網關或代理服務器地址,通訊協議 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 關於消息實體的警告信息 Warn: 199 Miscellaneous warning

拓展知識:

User-Agent裏面包含了瀏覽器客戶端的信息,好比:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36

經過這個信息能夠看到使用的是Chrome瀏覽器,內核是Apple的WebKit。

其實前世界上主要有來自四個不一樣機構的四種的Web瀏覽器內核。每一家機構都推出了至少一種使用本身的內核的瀏覽器產品。

這四家機構分別是Microsoft、Mozilla、Apple和Opera SAS,提供的內核則分別叫作Trident、Gecko、WebKit和Presto,推出的主打瀏覽器則分別叫作Internet Explorer、Firefox、Safari和Opera。咱們最常使用的Chrome瀏覽器就是用的蘋果公司的Webkit。國內的一些瀏覽器也是基於webkit內核的,其所謂的雙核中的極速模式就是webkit內核,兼容模式就是ie的trident內核。

Response Headers部分各個字段的功能

Request Headers是請求頭,Response Headers是響應頭,一樣,它也包含了一些字段信息:

Header 解釋 示例
Accept-Ranges 代表服務器是否支持指定範圍請求及哪一種類型的分段請求 Accept-Ranges: bytes
Age 從原始服務器到代理緩存造成的估算時間(以秒計,非負) Age: 12
Allow 對某網絡資源的有效的請求行爲,不容許則返回405 Allow: GET, HEAD
Cache-Control 告訴全部的緩存機制是否能夠緩存及哪一種類型 Cache-Control: no-cache
Content-Encoding web服務器支持的返回內容壓縮編碼類型。 Content-Encoding: gzip
Content-Language 響應體的語言 Content-Language: en,zh
Content-Length 響應體的長度 Content-Length: 348
Content-Location 請求資源可替代的備用的另外一地址 Content-Location: /index.htm
Content-MD5 返回資源的MD5校驗值 Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range 在整個返回體中本部分的字節位置 Content-Range: bytes 21010-47021/47022
Content-Type 返回內容的MIME類型 Content-Type: text/html; charset=utf-8
Date 原始服務器消息發出的時間 Date: Tue, 15 Nov 2010 08:12:31 GMT
ETag 請求變量的實體標籤的當前值 ETag: 「737060cd8c284d8af7ad3082f209582d」
Expires 響應過時的日期和時間 Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified 請求資源的最後修改時間 Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
Location 用來重定向接收方到非請求URL的位置來完成請求或標識新的資源 Location: http://www.zcmhi.com/archives...
Pragma 包括實現特定的指令,它可應用到響應鏈上的任何接收方 Pragma: no-cache
Proxy-Authenticate 它指出認證方案和可應用到代理的該URL上的參數 Proxy-Authenticate: Basic
refresh 應用於重定向或一個新的資源被創造,在5秒以後重定向(由網景提出,被大部分瀏覽器支持) Refresh: 5; url=http://www.zcmhi.com/archives...
Retry-After 若是實體暫時不可取,通知客戶端在指定時間以後再次嘗試 Retry-After: 120
Server web服務器軟件名稱 Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Set-Cookie 設置Http Cookie Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Trailer 指出頭域在分塊傳輸編碼的尾部存在 Trailer: Max-Forwards
Transfer-Encoding 文件傳輸編碼 Transfer-Encoding:chunked
Vary 告訴下游代理是使用緩存響應仍是從原始服務器請求 Vary: *
Via 告知代理客戶端響應是經過哪裏發送的 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 警告實體可能存在的問題 Warning: 199 Miscellaneous warning
WWW-Authenticate 代表客戶端請求實體應該使用的受權方案 WWW-Authenticate: Basic
參考:

https://imququ.com/post/four-...

https://blog.csdn.net/bluehea...

相關文章
相關標籤/搜索