application/x-www-form-urlencoded与multipart/form-data与application/json的区别

前端数据传递至后台时,需要对其进行编码,其中,编码格式可分为四种:application/x-www-form-urlencoded,multipart/form-data,application/json,text/plain

text/plain是纯文本数据,这里不做解释,Navigator.sendBeacon会使用。

前后台完成数据交互的方式只有两种:一是form表单提交,二是ajax提交。

form表单可通过enctype属性设置编码类型,默认值为:application/x-www-form-urlencoded;ajax可通过contentType属性设置编码类型,默认值也是:application/x-www-form-urlencoded;

1.application/x-www-form-urlencoded

后台如何接收?使用request.getParameter(“work”);来获取参数名和参数值。

这种编码格式,是我们最常见的一种方式,将数据封装成一个字符串,参数名和参数值使用"=“拼接,参数之间使用”&"拼接,最终传递至后台的数据格式形如:key1=value1&key2=value2&…;

另外,key和value都会分别使用encodeURI()对其进行编码,也就是你所要传递的数据,实际上已经进行了一次编码,形如:name=Marydon&work=%E7%A8%8B%E5%BA%8F%E5%91%98,服务器接收到后干的第一件事就是使用URLDdecoder.decode()对name和value进行一次解码。
不管是form表单请求还是ajax请求,都是这样进行数据组装的。

get请求:没有请求体;会直接将form数据拼接到url中,用?隔开,数据对外可见;

post请求:将数据放到请求体中;无法直观看到要传输的数据,安全性相对高一点。

Content-Type属性,告诉服务器提交的数据的字符集是utf-8,并让服务器以utf-8格式解析数据,由此可见:

问题不在于服务器,而在于浏览器:当浏览器检测到编码格式为application/x-www-form-urlencoded并且为get请求时,浏览器会先用ISO-8859-1对form数据进行编码,然后再用encodeURI()对其进行编码。

所以,get请求导致后台接收到的中文出现乱码的根本原因是:页面字符集是utf-8,浏览器却按iso-8859-1进行重新编码,后台接收后以utf-8进行解码当然会出现乱码。

小结:

当表单数据的编码格式为:application/x-www-form-urlencoded时:

get请求,浏览器会将数据按照iso-8859-1进行重新编码,导致后台接收到中文时必然乱码;

post请求,浏览器会按照utf-8对要提交的数据进行编码,由于后台本身就是使用utf-8对其进行解析,所以才不会出现乱码的情况。

2.multipart/form-data

主要用于传输文件,将文件转换成二进制数据进行传输,不涉及转码问题。

后台如何接收?使用request.getInputStream();取值。

IE浏览器和chrome浏览器下,传输的form数据是不一样的;

3.application/json

后台如何接收?使用request.getReader()取值,也可以使用request.getInputStream()获取。

结果提交的数据还是form表单形式,根本不是json

以json格式进行数据的传输,从前端发送json形式的方式不常见,常见的是从服务器对服务器,即一台服务器发送json数据,另一台服务器负责接收。

言归正传,怎样才能通过ajax向后台传输json数据呢?

首先需要明白的是,前端向后台传输数据有且只有两种方式,一种是常见的字符串格式,另一种就是二进制数据,也就是不管你向后台传输什么类型的数据都会被转换成字符串或者二进制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极限编程XP例题

答案:D 解析: 结对编程,一个人写代码,一个人看,由于是两个或两个以上的人负责,因此选项A 支持共同代码拥有和共同对系统负责是正确的 选项B 由于是一个人写一个人看,变相实现了代码审查 选项…

深入了解 GROW with SAP:它究竟是什么?

GROW with SAP 是一套综合全面的产品组合,包含一系列解决方案、加速采用服务、社区支持和学习资源,能够确保各种规模的企业成功采用 ERP 云软件。部署 GROW with SAP 后,企业可以采用 SAP S/4HANA Cloud Public Edition [ERP 公有云版]。在 S…

4 路由模式

路由模式 逻辑图 如果我们将生产环境的日志进行处理,而日志是分等级的,我们就按照 error waring info三个等级来讲解 一个消费者是处理【所有】(info,error,warning)的日志,用于做数据仓库&am…

Redis搭建集成

图示 正常来讲配置一主两从需要三台服务器,博主内存告急,就使用一台进行操作了,使用多台跟一台操作没有区别,只是多台不需要新建太多配置文件 一. 准备配置文件 如果你跟我一样是在一台服务器里面进行配置主从服务的,跟我一起操作即可 找到redis目录 在bin目录同位置创建一…

Linux驱动.之驱动开发思维,设备,驱动,总线分析思想,驱动的分类(字符设备,块设备,网络设备)

在stm32,裸机开发时,偏底层,跟寄存器打交道,有些MCU提供了库,库也还是操作寄存器的,通过配置寄存器, 配置各种工作模式,时钟,等等,交换数据等等。 Linux下驱…

SpringBoot开发——整合Spring Data JPA

文章目录 1、创建项目,添加Spring Data JPA依赖2、创建数据表student3、创建实体类Student4、创建接口文件5、创建Controller6、配置application.yml7、整合完成8、其它一些说明Spring Data JPA(Java Persistence API) 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JP…

Unity笔记之静态/动态合批

借用博主链接 一、静态合批 1、首先项目设置里面需要勾选静态合批 2、添加静态合批选项 3、至此就完成了,至于成功没有就要去分析器里面看了。 静态合批注意问题: 二、动态合批 1、首先项目设置里面需要勾选动态合批 2、调用 StaticBatchingUtilit…

给大家推荐好用的AI网站

地址:https://ai.ashuiai.com/auth/register?inviteCode8E8DIC1QCR 个人觉得挺好用的,可以免费,免费有限制次数,也可以会员升级200永久免费,我用的200永久免费。 可以在国内使用以下ai模型 回答问题更智能&#xff…

IBM中国研发部裁员:全球化背景下的IT产业变局与应对之道

裁员风波中的思考与机遇 前言了解霍尼韦尔的“东方服务东方”施耐德电气的“中国中心”战略对比与分析 中国信息技术(IT)行业展现出蓬勃发展的前景**政府支持与政策导向****技术创新与应用****市场规模与需求****人才培养与就业**国际化与开放合作总结 前言 如何看待IBM中国研发…

“冰山之下”:谁在成为车企的真正智能助手?

“其实我们一直扮演的角色就是数字化助手,也就是别人可以去挖金,我们给大家提供铲子,这是我们扮演的角色,而现在我们希望给大家提供最好的铲子。” 作者| 皮爷 出品|产业家 如果说AI发展的最鲜明印痕是什么?有人…

【原创教程】自动化工程案例01:8工位插针装配机03-程序解读

在前面两篇文章中,我们介绍了8工位设备每个工位的情况,然后我们介绍了触摸屏的情况,接着我们来看一下程序。关于一些实物照片不宜公开发表,需要的可以私信。 程序系统块设置 系统块中的模块实际上是我们所使用的的硬件设施 符号…

本地Linux服务器使用docker搭建DashDot并实现公网实时监测服务器信息

文章目录 前言1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用3. 本地访问DashDot服务4. 安装cpolar内网穿透5. 固定DashDot公网地址 前言 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘,并且结合cpolar内网穿透工具可以实现公网实…

HC-SR501人体红外传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 body_hw.h文件 body_hw.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 HC-SR501人体红外模块是基于红外线技术的自动控制模块,采用德国原装进口LHI77…

在 ArkTS 中,如何有效地进行内存管理和避免内存泄漏?

ArkTS 是鸿蒙生态的应用开发语言,它在 TypeScript 的基础上进行了优化和定制,以适应鸿蒙系统的需求。 以下是在 ArkTS 中进行有效的内存管理和避免内存泄漏: 1. 使用 const 和 let 合理声明变量: 使用 const 声明那些不会重新赋…

USB总线开关量DIO采集卡,24路数字量输入输出及32位计数器卡USB5801

阿尔泰科技 型号:USB5801 概述: 产品应用: 指标参数: 数字量 通道数 24路,每8路可配置成输入或输出 电气标准 TTL兼容 数字量输入 高电平的低电压:2V 低电平的高电压:0.8V 数字量输出 …

数据结构基础讲解(七)——数组和广义表专项练习

本文数据结构讲解参考书目: 通过网盘分享的文件:数据结构 C语言版.pdf 链接: https://pan.baidu.com/s/159y_QTbXqpMhNCNP_Fls9g?pwdze8e 提取码: ze8e 数据结构基础讲解(六)——串的专项练习-CSDN博客 个人主页:樱娆…

替代区块链

随着比特币的成功,人们逐渐意识到区块链技术的潜力,并随之出现了迅速的发展,各种区块链协议、应用程序和平台相应产生。 需要指出的是,在这种多元的局面下,很多项目迅速失去了它们的吸引力。事实上,有不少项…

ITK-高斯滤波

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 高斯滤波原理 高斯滤波(Gaussian Blur)是数字图像处理中常见的一种平滑滤波器,旨在通过模糊处…

捉虫笔记(四)-- 空格引发的悬案

空格引发的悬案 1、描述现象: 在代码中有一段利用rmdir指令删除目录代码,但是有用户反馈一直删除失败,但是有没有看到错误的日志信息,正好有同事能复现,所以今天好好探究一番。 2、思考过程 很好奇的一点就是为什么有的环境就是正常。 首…

Edge-Triggered模式:反应堆

Linux: Linux Code - Gitee.comhttps://gitee.com/RuofengMao/linux/tree/master/Reactor