热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Http要求中的ContentType

一媒介—-如今搞前端的不学好http有关的学问已不行啦~笔者也是后知后觉,在搞node的时刻意想到收集方面的柔弱,最先学起http相干学问。这一篇是异常基本的解说,合适入门职员控制
一 媒介

—-如今搞前端的不学好http有关的学问已不行啦~笔者也是后知后觉,在搞node的时刻意想到收集方面的柔弱,最先学起http相干学问。这一篇是异常基本的解说,合适入门职员控制content-type的学问和有履历的职员查阅。能够说,弄懂了content-type,你才在进修http的道路上走的越发顺畅,让我们满怀激情的最先吧~~

二 正文

1.熟悉content-type

要进修content-type,必需事前晓得它究竟是什么,是干什么用的。

HTTP协定(RFC2616)采用了要求/响应模子。客户端向效劳器发送一个要求,要求头包含要求的要领、URI、协定版本、以及包含要求修饰符、客户信息和内容的相似于MIME的音讯构造。效劳器以一个状况行作为响应,响应的内容包含音讯协定的版本,胜利或许毛病编码加上包含效劳器信息、实体元信息以 及能够的实体内容。

平常HTTP音讯由一个起始行,一个或许多个头域,一个只是头域完毕的空行和可选的音讯体构成。
HTTP的头域包含通用头,要求头,响应头和实体头四个部份。每个头域由一个域名,冒号(:)和域值三部份构成。域名是大小写无关的,域值前能够增加任何数目的空格符,头域能够被扩大为多行,在每行最先处,运用最少一个空格或制表符。

要求音讯和响应音讯都能够包含实体信息,实体信息平常由实体头域和实体构成。实体头域包含关于实体的原信息,实体头包含Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。

Content-Type是返回音讯中异常重要的内容,示意背面的文档属于什么MIME范例。Content-Type: [type]/[subtype]; parameter。比方最罕见的就是text/html,它的意义是说返回的内容是文本范例,这个文本又是HTML花样的。原则上浏览器会依据Content-Type来决议怎样显现返回的音讯体内容。

2.Content-type与Accept

(1)Accept属于要求头, Content-Type属于实体头。
Http报头分为通用报头,要求报头,响应报头和实体报头。
要求方的http报头构造:通用报头|要求报头|实体报头
响应方的http报头构造:通用报头|响应报头|实体报头

(2)Accept代表发送端(客户端)愿望接收的数据范例。
比方:Accept:text/xml;
代表客户端愿望接收的数据范例是xml范例

Content-Type代表发送端(客户端|效劳器)发送的实体数据的数据范例。
比方:Content-Type:text/html;
代表发送端发送的数据花样是html。

两者合起来,
Accept:text/xml;
Content-Type:text/html
即代表愿望接收的数据范例是xml花样,本次要求发送的数据的数据花样是html。

3.content-type速查

更全面的请接见:http://www.runoob.com/http/ht…

罕见的媒体花样范比方下:

text/html : HTML花样
text/plain :纯文本花样
text/xml : XML花样
image/gif :gif图片花样
image/jpeg :jpg图片花样
image/png:png图片花样

以application开首的媒体花样范例:

application/xhtml+xml :XHTML花样
application/xml : XML数据花样
application/atom+xml :Atom XML聚合花样
application/json : JSON数据花样
application/pdf :pdf花样
application/msword : Word文档花样
application/octet-stream : 二进制流数据(如罕见的文件下载)
application/x-www-form-urlencoded : 中默许的encType,form表单数据被编码为key/value花样发送到效劳器(表单默许的提交数据的花样)

别的一种罕见的媒体花样是上传文件之时运用的:

multipart/form-data : 须要在表单中举行文件上传时,就须要运用该花样

4.罕见的content-type解说

(1)application/x-www-form-urlencoded

这应该是最罕见的 POST 提交数据的体式格局了。浏览器的原生 form 表单,假如不设置 enctype 属性,那末终究就会以 application/x-www-form-urlencoded 体式格局提交数据。要求相似于下面如许(无关的要求头在本文中都省略掉了):

POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

起首,Content-Type 被指定为 application/x-www-form-urlencoded;
其次,提交的数据根据 key1=val1&key2=val2 的体式格局举行编码,key 和 val 都举行了 URL 转码。大部份效劳端言语都对这类体式格局有很好的支撑。比方 PHP 中,$_POST[‘title’] 能够获取到 title 的值,$_POST[‘sub’] 能够取得 sub 数组。

许多时刻,我们用 Ajax 提交数据时,也是运用这类体式格局。比方 JQuery 和 QWrap 的 Ajax,Content-Type 默许值都是「application/x-www-form-urlencoded;charset=utf-8」。

(2)multipart/form-data

这又是一个罕见的 POST 数据提交的体式格局。我们运用表单上传文件时,必需让 form 的 enctyped 即是这个值。

客户端form标签:


直接来看一个天生的要求示例:

POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

起首天生了一个 boundary 用于支解差别的字段,为了避免与正文内容反复,boundary 很长很庞杂。
然后 Content-Type 里指清楚明了数据是以 mutipart/form-data 来编码,本次要求的 boundary 是什么内容。音讯主体里根据字段个数又分为多个构造相似的部份,每部份都是以 –boundary 最先,紧接着内容形貌信息,然后是回车,末了是字段具体内容(文本或二进制)。假如传输的是文件,还要包含文件名和文件范例信息。音讯主体末了以 –boundary– 标示完毕。关于 mutipart/form-data 的细致定义,请前去 rfc1867 检察。

这类体式格局平常用来上传文件,各大效劳端言语对它也有着优越的支撑。

上面提到的这两种 POST 数据的体式格局,都是浏览器原生支撑的,而且现阶段原生 form 表单也只支撑这两种体式格局。然则跟着越来越多的 Web 站点,尤其是 WebApp,悉数运用 Ajax 举行数据交互以后,我们完全能够定义新的数据提交体式格局,给开辟带来更多轻易。

(3)application/json

application/json 这个 Content-Type 作为响应头人人一定不生疏。实际上,如今越来越多的人把它作为要求头,用来通知效劳端音讯主体是序列化后的 JSON 字符串。因为 JSON 范例的盛行,除了低版本 IE 以外的各大浏览器都原生支撑 JSON.stringify,效劳端言语也都有处置惩罚 JSON 的函数,运用 JSON 不会赶上什么贫苦。

JSON 花样支撑比键值对庞杂很多的构造化数据,这一点也很有效。记得我几年前做一个项目时,须要提交的数据条理异常深,我就是把数据 JSON 序列化以厥后提交的。不过当时我是把 JSON 字符串作为 val,依然放在键值对里,以 x-www-form-urlencoded 体式格局提交。

Google 的 AngularJS 中的 Ajax 功用,默许就是提交 JSON 字符串。比方下面这段代码:

var data = {'title':'test', 'sub' : [1,2,3]};
$http.post(url, data).success(function(result) {
...
});

终究发送的要求是:

POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]}

这类计划,能够轻易的提交庞杂的构造化数据,迥殊合适 RESTful 的接口。各大抓包东西如 Chrome 自带的开辟者东西、Firebug、Fiddler,都邑以树形构造展现 JSON 数据,异常友爱。但也有些效劳端言语还没有支撑这类体式格局,比方 php 就没法经由过程 $_POST 对象从上面的要求中取得内容。这时刻,须要本身着手处置惩罚下:在要求头中 Content-Type 为 application/json 时,从 php://input 里取得原始输入流,再 json_decode 成对象。一些 php 框架已最先这么做了。

(4)text/xml

它是一种运用 HTTP 作为传输协定,XML 作为编码体式格局的长途挪用范例。典范的 XML-RPC 要求是如许的:

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

examples.getStateName


41


XML-RPC 协定简朴、功用够用,种种言语的完成都有。它的运用也很普遍,如 WordPress 的 XML-RPC Api,搜索引擎的 ping 效劳等等。Javascript 中,也有现成的库支撑以这类体式格局举行数据交互,能很好的支撑已有的 XML-RPC 效劳。不过,我个人以为 XML 构造照样过于痴肥,平常场景用 JSON 会更天真轻易。

三 跋文

RFC2616:https://www.w3.org/Protocols/…
内容参考:
(1)http://blog.csdn.net/bluehear…
(2)https://www.topjishu.com/6324…
(3)http://blog.csdn.net/muzizong…


推荐阅读
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 如何使用 `org.apache.poi.openxml4j.opc.PackagePart` 类中的 `loadRelationships()` 方法及其代码示例详解 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 本文详细解析了微信服务端示例类的功能与应用。其中,`ClientResponseHandler` 类主要用于处理微信支付所需的响应数据,而 `TenpayHttpClient` 则是对 HTTP 请求(包括 GET 和 POST 方法)进行了封装,以便在内部调用时更加便捷和高效。这些工具类在实际开发中起到了关键作用,开发者无需深入了解其底层实现细节,即可轻松集成微信支付功能。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • Java新手求助:如何优雅地向心仪女生索要QQ联系方式(附代码示例与技巧)
    在端午节后的闲暇时光中,我无意间在技术社区里发现了一篇关于如何巧妙地向心仪女生索取QQ联系方式的文章,顿时感到精神焕发。这篇文章详细介绍了源自《啊哈!算法》的方法,不仅图文并茂,还提供了实用的代码示例和技巧,非常适合 Java 新手学习和参考。 ... [详细]
author-avatar
阿加芬散阿加芬散
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有