HTTP request : Content-Type

218 篇文章 18 订阅
208 篇文章 8 订阅

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

<!DOCTYPE html><title>Content of a.html.</title>
--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

<?xml version="1.0"?>
<methodCall> 
    <methodName>examples.getStateName</methodName>
    <params> 
        <param> 
            <value><i4>41</i4></value> 
        </param> 
    </params>
</methodCall>

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

 

 转自https://www.jianshu.com/p/fbd1ba0a7ce7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值