HTTP request : Content-Type

Content-Type 与 MediaType 存在对应关系:

Content-Type

  • 客户端发起 HTTP POST/PUT 请求时,可以指定Request Header 的 Content-Type,表示向服务端发送的 Request Body 中的数据的格式
  • 服务端返回数据时,也可以指定Content-Type,表示返回数据的格式

MediaType

服务端接口中设置,表示只接收客户端发送的指定类型的数据,否则报错

在Spring MVC 中,可以通过如下来指定 MediaType,表示该接口只接收 Content-Type 为 JSON 的数据。

@RequestMapping(value = "{bookId}", method = RequestMethod.POST, consume = MediaType.APPLICATION_JSON_VALUE)

常见的Content-Type/MediaType

  • application/atom+xml
  • application/x-www-form-urlencoded
  • application/json
  • application/octet-stream
  • application/xhtml+xml
  • application/xml
  • image/gif
  • image/jpeg
  • image/png
  • multipart/form-data
  • text/html
  • text/plain
  • text/xml

application/x-www-form-urlencoded

query string -- name/value pairs are separated by the ampersand (&), and names are separated from values by the equals symbol (=)

var1=One&var2=Two

multipart/form-data

上传文件时,使用该类型,举个例子:

// request line
POST http://www.example.com HTTP/1.1

// request header
Content-Type:multipart/form-data; boundary=WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Length: $requestlen

// request body
--Boundary-----------------------
content-disposition: form-data; name="field1"

value1
--Boundary-----------------------
content-disposition: form-data; name="field2"

value2
--Boundary-----------------------
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
Content-Transfer-Encoding: binary

$binarydata
--Boundary-----------------------
Content-Disposition: form-data; name="file1"; filename="a.txt"
Content-Type: text/plain

Content of a.txt.
--Boundary-----------------------
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html

Content of a.html.
--Boundary-----------------------
Content-Disposition: form-data; name="file3"; filename="binary"
Content-Type: application/octet-streamaωb

$binarydata
--Boundary--
  1. 首先生成了一个 boundary 用于分割不同的字段(该字段可设置的复杂点,以防与正文重复)
  2. 消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary开始;每一部份有自己的 MIME headers,如Content-Type、Content-Disposition
  3. 消息主体最后以 --boundary-- 标示结束

application/json

告诉服务端消息主体是序列化后的 JSON 字符串。JSON 格式支持比键值对复杂得多的结构化数据,特别适合 RESTful 的接口。

text/xml

XML-RPC(XML Remote Procedure Call),是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的:

POST http://www.example.com HTTP/1.1 
Content-Type: text/xml


 
    examples.getStateName
     
         
            41 
         
    

XML 结构还是过于臃肿,一般场景用 JSON 会更灵活方便。

你可能感兴趣的:(HTTP request : Content-Type)