请求的Content-Type标头指定消息体的格式,指示接收者应如何解析消息体内容。...Web API框架提供了JSON格式化器和XML格式化器,默认支持JSON和XML序列化。可以在请求的Accept首部字段指定接收的类型。...:{ "Value": 42 } 4 内容协商 在HTTP中主要的内容协商机制包括如下的请求头: Accept:应答中可接受的多媒体类型,如"application/json," "application...集合SupportedMediaTypes包含了被支持的多媒体类型,内容协商者依据请求头的Accept标头来匹配这个集合。...字符编码方式 选好格式化器以后,内容协商者会选取最好的字符编码方式,通过查看格式化器的SupportedEncodings属性,并与请求的Accept-Charset标头值进行匹配。
HTTP 内容协商 什么是内容协商 在 HTTP 中,内容协商是一种用于在同一 URL 上提供资源的不同表示形式的机制。...一般来说,客户端用 Accept 头告诉服务器希望接收什么样的数据,而服务器用 Content 头告诉客户端实际发送了什么样的数据。 为什么需要内容协商 我们为什么需要内容协商呢?...所以我们就引出了内容协商的几种概念,下面依次来进行探讨 内容协商标头 Accept 接受请求 HTTP 标头会通告客户端自己能够接受的 MIME 类型 那么什么是 MIME 类型呢?...验证器的值用作 If-Modified-Since 和If-Match标头的参数。...客户端存储的现代 API 是 Web 存储 API(localStorage 和 sessionStorage)和 IndexedDB。
整个资源,以及它的各种表示形式,共享一个特定的 URL。当访问某项资源的时候,内容协商会决定如何选择一种指定的表示形式。客户端和服务器端之间存在多种协商方式。...服务端驱动型内容协商机制 在服务端驱动型内容协商或者主动内容协商中,浏览器(或者其他任何类型的用户代理)会随同 URL 发送一系列的 HTTP 标头。这些标头描述了用户倾向的选择。...HTTP/1.1 规范指定了一系列的标准标头用于启动服务端驱动型内容协商(Accept、Accept-Charset、Accept-Encoding、Accept-Language))。...Vary 响应标头 与前面列举的 Accept-* 形式的由客户端发送的标头相反,Vary 标头是由服务器在响应中发送的。它指示了服务器在服务端驱动型内容协商阶段所使用的标头清单。...在标头很少的时候,这并不是问题,但是随着数量的增多,消息的体积会导致性能的下降。带有精确信息的标头发送的越多,信息熵就会越大,也就准许了更多 HTTP 指纹识别行为,以及与此相关的隐私问题的发生。
key1=value1&key2=value2 是提供给 Web 服务器的额外参数。如果是 GET 请求,一般带有请求 URL 参数,如果是 POST 请求,则不会在路径后面直接加参数。...Host: developer.mozilla.org 上面的 Accpet、 Accept-Language、Accept-Encoding 都是属于内容协商的请求标头,我们会在下面说明 Referer...内容协商 内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的标准。 ?...透明协商(Transparent Negotiation) 是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。...内容协商的分类有很多种,主要的几种类型是 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language。
key1=value1&key2=value2 是提供给 Web 服务器的额外参数。如果是 GET 请求,一般带有请求 URL 参数,如果是 POST 请求,则不会在路径后面直接加参数。...实体标头 实体标头是描述消息正文内容的 HTTP 标头。实体标头用于 HTTP 请求和响应中。...Host: developer.mozilla.org 上面的 Accpet、 Accept-Language、Accept-Encoding 都是属于内容协商的请求标头,我们会在下面说明 Referer...透明协商(Transparent Negotiation) 是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。...内容协商的分类有很多种,主要的几种类型是 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language。
key1=value1&key2=value2 是提供给 Web 服务器的额外参数。如果是 GET 请求,一般带有请求 URL 参数,如果是 POST 请求,则不会在路径后面直接加参数。...实体标头 实体标头是描述消息正文内容的 HTTP 标头。...Host: developer.mozilla.org 上面的 Accpet、 Accept-Language、Accept-Encoding 都是属于内容协商的请求标头,我们会在下面说明 Referer...透明协商(Transparent Negotiation) 是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。...内容协商的分类有很多种,主要的几种类型是 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language。
这意味着认识到Web通常使用URL而不是IP地址和端口号进行寻址,并且WebSocket连接应该能够使用Web请求相同的基于HTTP的任何其他类型进行初始握手。...根据HTTP RFC格式化的请求标头的系统示例如下所示: GET /index.html HTTP/1.1 Host: www.example.com 收到请求标头后,服务器然后格式化一个以状态行开头的响应标头...浏览器中请求的Web URL通过全局DNS系统映射到IP地址,HTTP请求的默认端口为80.这意味着虽然Web URL已输入浏览器,但实际通信是通过TCP进行的/ IP,使用类似于123.11.85.9...Connection标头告诉服务器客户端希望协商套接字使用方式的更改。 随附的值Upgrade表示当前通过TCP使用的传输协议应该更改。...它包含在响应中的WebSocket-Accept标头: Sec-WebSocket-Accept: 5fXT1W3UfPusBQv/h6c4hnwTJzk= 在Node.js WebSocket服务器中
可能会限制公有缓存(public cache)为多个客户请求利用相同响应的能力 HTTP/1.1包含下面的请求头域来使服务器驱动协商启动,这些请求头域描述了用户代理的能力和用户喜好:Accept,Accept-Charset...Vary头域能被用来表达服务器选择表现形式(representation)利用的参数,表现形式受服务器驱动协商的支配。...此规范没有定义透明协商的机制,所以,它不能防止任何这样的机制被用于HTTP/1.1。 ASP.NET Web API支持内容协商: 客户端和服务器可以一起从API返回的数据,以确定正确的格式....我们提供了默认的XML支持, JSON的, 和表格的URL编码格式, 你可以扩展这种支持,通过添加自己的格式化, 甚至取代默认内容的谈判策略....ASP.NET Web API的内容协商具体请看:http://www.asp.net/web-api/overview/formats-and-model-binding/content-negotiation
如果需要上传文件,请阅读DRF上传文件 注意 在开发客户端应用程序时,请始终记住确保Content-Type在 HTTP 请求中发送数据时设置标头。...如果服务器和客户端之间约定好了使用json来传递信息,此时可以对默认解析器进行设置,在settings.py中加入下面的内容即可。...无论请求方式是什么,URL中的参数,我们在DRF中总是使用request.query_params来获取。...使用Response类只是为返回内容协商的 Web API 响应提供了一个更好的接口,可以呈现为多种格式。...不过DRF官方还是建议我们对继承自APIView类或使用@api_view进行装饰的函数,都返回Response对象。 使用了Response对象返回,默认会带有一定的样式。
API如何实现内容协商。...本文将考察Web API如何使用Accept和Accept-Charset报头。(目前,还没有对Accept-Encoding或Accept-Language的内建支持。)...Web API提供了XML和JSON的媒体格式化器,因而你可以创建自定义的格式化器,以支持其它媒体类型。...为了评估匹配情况,内容协商器要对此格式化器考察两样东西: SupportedMediaTypes集合,它含有一个可支持的媒体类型的列表。内容协商器尝试根据请求的Accept报头对这个列表进行匹配。...如果仍无匹配,内容协商器便简单地捡取能够对类型进行序列化的第一个格式化器。 选择字符编码 在选择格式化器之后,内容协商器会选择最佳字符编码。
Accept-Charset 也是属于内容协商的一部分,它和 Accept 一样,也可以用 q 来表示字符集,用逗号进行分割,例如 Accept-Charset: iso-8859-1 Accept-Charset...: utf-8, iso-8859-1;q=0.5 Accept-Charset: utf-8, iso-8859-1;q=0.5, *;q=0.1 “事实上,很多以 Accept-* 开头的标头,都是属于内容协商的范畴...Accept-Encoding 也是属于内容协商 的一部分,使用并通过客户端选择 Content-Encoding 内容进行返回。...然而 Content-Location 表示发生内容协商时用于访问资源的直接 URL,而无须进一步协商。...Location 和 Content-Location 是不一样的,Location 表示重定向的 URL,而 Content-Location 表示用于访问资源的直接 URL,以后无需进行进一步的内容协商
curl的带宽控制和下载配额 使用--limit-rate限制curl的下载速度: curl URL --limit-rate 50k 命令中用k(千字节)和m(兆字节)指定下载速度限制。...请求的来源 -e参数用来设置 HTTP 的标头 Referer,表示请求的来源。 curl -e 'https://taobao.com?...设置请求头 -H参数添加 HTTP 请求的标头。...curl -H 'Accept-Language: en-US' https://google.com # 上面命令添加 HTTP 标头 Accept-Language: en-US。...curl -L -d 'tweet=hi' https://api.example.com/tweet 调试参数 -v参数输出通信的整个过程,用于调试。
适用于"POST"、"PUT"和"PATCH"方法。 2.响应对象 REST 框架还引入了一个对象,该对象是一种获取未渲染内容并使用内容协商来确定要返回给客户端的正确内容类型。...的可选格式 了利用我们的响应不再硬连接到单个内容类型的事实,让我们向 API 终结点添加对格式后缀的支持。...使用格式后缀可以为我们提供显式引用给定格式的URL,API将能够处理诸如 http://example.com/api/items/4.json 之类的URL。...world\")\n", "linenos": false, "language": "python", "style": "friendly" } ] 我们可以通过使用标头来控制返回的响应的格式...# JSON suffix http http://127.0.0.1:8000/snippets.api # Browsable API suffix 同样,我们可以使用标头控制我们发送的请求的格式
可用选项包括检查文件扩展名的URL路径、检查“accept”头、特定查询参数,或者在不请求任何内容时返回默认内容类型。默认情况下,首先检查请求URI中的路径扩展,然后检查“accept”头。...个人理解: 所谓内容协商,其实就是根据客户端请求的url扩展后缀、请求参数或者请求头来指定响应内容的类型。...4 三种内容协商策略及实现 spring支持三种内容协商策略: URL中使用后缀,例如 .xml/.json URL使用查询参数,例如 ?...4.2.3 请求头模式 请求头模式中加入Accept:application/*类似的内容,内容协商器会解析出来然后路由到指定的视图解析器。...从结果中可以看出走的是参数模式。④也就是说如果参数模式和请求头模式都开启并且请求参数中包含这种模式的内容情况下,会优先走参数策略模式。
概述 官方解释: 可以配置SpringMVC如何根据请求确定请求的媒体类型。可用选项包括检查文件扩展名的URL路径、检查“accept”头、特定查询参数,或者在不请求任何内容时返回默认内容类型。...默认情况下,首先检查请求URI中的路径扩展,然后检查“accept”头。 个人理解: 所谓内容协商,其实就是根据客户端请求的url扩展后缀、请求参数或者请求头来指定响应内容的类型。...,在spring内部的核心流程时序图如下: 4 4.三种内容协商策略及实现 spring支持三种内容协商策略: URL中使用后缀,例如 .xml/.json URL使用查询参数,例如 ?...内容和上述一致: 发送参数和请求头模式的请求找不到合适的视图解析器直接走默认响应类型: 4.2.2查询参数模式 查询参数模式中默认的参数名是format,可以在设置启用参数查询模式的基础上设置自定义...③也就是说如果后缀模式和请求头模式都开启并且请求参数中包含这种模式的内容情况下,会优先走后缀策略模式。
HTTP标头使客户端和服务器可以通过HTTP请求或响应传递其他信息。HTTP标头由不区分大小写的名称,后跟冒号(:)和值组成。 值之前的空格将被忽略。...响应标头包含有关响应的其他信息,例如响应的位置或提供响应的服务器。 实体标头包含有关资源主体的信息,例如其内容长度或MIME类型。...Keep-Alive 控制持久连接应保持打开状态的时间。 内容协商 Section Accept 通知服务器有关可以发送回的数据类型。 Accept-Charset 客户可以理解哪种字符编码。...Cookie2 包含先前由服务器发送的带有Set-Cookie2标头的HTTP cookie ,但已被废弃。使用Cookie代替。...如果指定了升级头字段,那么发送者还必须发送带有指定升级选项的连接头字段。有关Connection标头字段的详细信息,请参见上述RFC的6.1节。
理解和使用内容协商 我们的开发者在发送一个 REST API 请求的同时,根据应用场景,针对相同的资源,可能会期待不同的返回形式。 比如,我希望根据用户客户端语言,同一个资源的内容可以返回不同的语言。...因此,我们在设计 REST API 的时候,应该提供完备的内容协商能力。 使用 URL 参数进行内容协商 最容易想到的自然是通过 URL 参数进行控制,我们经常看到形如 / 航班号 /entry?...format=json &scope=document&pageSize=30&sK=cloud&sO=dsc 使用 Accept 头进行内容协商 使用 URL 参数,简单灵活,但是也由此带来了设计上的随意和不标准...并且,过多的参数会导致 URL 的可读性变差,更有甚者,可能会导致 URL 过长,超出规范,API 请求无法执行。 更为标准的内容协商方式是使用 HTTP 头。...回页首 正确的使用 HTTP 响应代码 作为 API 的设计者,正确的将 API 执行结果和失败原因用清晰简洁的方式传达给客户程序是十分关键的一步。