formdata和json

5 篇文章 1 订阅
2 篇文章 0 订阅
HTTP content-type

Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。

Content-Type 标头告诉客户端实际返回的内容的内容类型。

语法格式:

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

常见的媒体格式类型如下:

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 : 需要在表单中进行文件上传时,就需要使用该格式

formdata和json的区别:

看下面的图就明白了。
从前端传来的都是二进制数据
1、content-type是不同的
2、json我们已经序列化好了,而formdata还是需要进行处理,虽然说后端框架已经帮我们处理好了。
formdata:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

json:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在formdata中有种特殊的格式:
multipart/form-data
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这种格式是传递的一条消息,相当于在消息体里面套消息, 给文件上传提供了便利,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;
由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。
multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。

总结:

在Form元素的语法中,EncType表明提交数据的格式,用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。
下边是说明:
application/x-www-form-urlencoded : 表单数据被编码为名称/值对。这是标准的默认编码格式。
multipart/form-data : 表单数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
application/json: JSON数据格式,将数据进行序列化的一种方式,后端可以直接使用。
text/plain : 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
补充
form的enctype属性为编码方式,常用有两种: application/x-www-form-urlencoded 和 multipart/form-data , 默认为application/x-www-form-urlencoded 。
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串append到url后面,用?分割,加载这个新的url。
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。
如果没有 type=file 的控件,用默认的 application/x-www-form-urlencoded 就可以了。
但是如果有 type=file 的话,也就是需要上传文件,就要用到 multipart/form-data 了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file)、Content-Type(默认为text/plain)、name(控件name)等信息,并加上分割符(boundary)。
  • 38
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: FormDataJSON 是两种不同的数据传输格式。 FormData 用于发送表单数据,它是一种键值对形式的数据结构,通常用于文件上传和表单提交。 JSON 是一种纯文本数据格式,具有良好的可读性和可扩展性,常用于数据交换和应用程序之间的通信。 总的来说,FormData 更适合用于发送文件和表单数据,而 JSON 更适合用于数据交换和 API 调用。 ### 回答2: FormDataJSON都是常见的数据传输格式,但它们之间有很大的区别。 1. 数据格式 FormData是一种表单数据格式,数据结构为键值对,每一个键值对包含一个表单字段的名称和其对应的值。表单数据包括文本、文件、二进制数据等。 JSON是一种轻量级的数据交换格式,基于键值对,用于在网络中传输数据。JSON可以表示简单的键值对,也可以表示复杂的嵌套结构。 2. 传输方式 FormData主要用于表单提交,常见的方法是使用表单的submit()函数或Ajax提交表单。使用表单的submit()函数提交时,数据会自动编码成多个部分,这些部分之间使用"boundary"分隔。而在使用Ajax提交时,可以使用jQuery.ajax()等函数进行传输。 JSON主要使用Ajax进行传输,传输方式因框架库的不同而有所差异。比如在jQuery中,使用$.ajax()函数提交数据。 3. 处理方式 FormData需要在服务端使用multipart/form-data来接收数据,然后使用相应的库进行解析。常见的解析库有Java的commons-fileupload和Python的werkzeug库。 JSON可以直接在服务端解析,无需额外的解析库。对于动态语言,如JavaScript和Python,JSON的解析速度相对较快。 4. 应用场景 FormData主要用于表单提交,适用于需要上传文件或二进制数据的场景。比如上传头像、图片和音频等。 JSON则适用于数据交互和通信的场景,可以在客户端和服务端之间传递数据。比如前后端分离的Web应用程序,可以在客户端使用Ajax获取数据。 总之,FormDataJSON之间有着根本的区别FormData主要用于表单数据的提交,JSON则主要用于在客户端和服务端之间的数据交互。在选择数据传输格式时,应根据不同的应用场景进行考虑。 ### 回答3: FormDataJSON是两种Web开发中常用的数据传输格式。它们在传输数据时有着各自的特点和用途。 首先,FormData主要用于表单数据的提交。它可以通过append()方法将多个键值对添加到表单实例中,支持文件上传,也可以通过XMLHttpRequest()对象的send()方法将数据发送到服务器。而JSON则更适用于Web API的请求和响应,通常用于前后端数据交互。 其次,在数据格式上,FormData将表单数据编码为multipart/form-data格式,该格式支持文件上传、二进制数据传输等功能,而JSON则是一种更加轻量级的数据传输格式,可以通过JSON.stringify()方法将数据编码为字符串,并通过XMLHttpRequest()对象发送至服务器。 最后,值得注意的是,FormData对于包含文件上传的表单数据,可以通过FormData.entries()方法将数据转化为一个键值对迭代器,此时每个键对应的值可能是一个字符串或者一个对象,其中对象中包含了文件上传的相关信息,比如文件名、文件类型等。而JSON则比较灵活,在数据格式化时可以自定义键值对,也可以嵌套子对象或数组。 综上所述,FormData适合于提交表单数据和文件上传,而JSON则更适合前后端数据交互,它们在不同场景下都有着重要的应用价值。在实际开发过程中,需要根据具体的需求和数据格式选择合适的传输方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值