HTTP---Post提交数据的几种类型
参考:https://www.cnblogs.com/yaojyhappy/p/9447160.html
Http Header里的Content-Type一般有这三种:
- application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。
- multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
- text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。postman软件里标的是RAW。
四种post请求方式
From表单中enctype属性
form表单中enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。
(1)、HTTP 协议是以 ASCII 码 传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。
(2)、协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须 使用什么编码方式 。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
(3)、数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。
application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
<form action="form_action.asp" enctype="text/plain"><p>First name: <input type="text" name="fname" /></p><p>Last name: <input type="text" name="lname" /></p><input type="submit" value="Submit" />
</form>
此时可以看到,
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 转码。大部分服务端语言都对这种方式很好的支持,常用的如jQuery中的ajax请求,Content-Type 默认值都是「application/x-www-form-urlencoded;charset=utf-8
multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 <form> 表单的enctype 等于 multipart/form-data。直接来看一个请求示例:
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/pngPNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
content-Type:boundary属性 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 multipart/form-data 来编码,本次请求的 boundary 是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary
开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary--
标示结束。 关于 multipart/form-data 的详细定义,请前往 rfc1867 查看。
这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持。
上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 <form> 表单也只支持这两种方式(通过 <form> 元素的 enctype
属性指定,默认为 application/x-www-form-urlencoded
。其实 enctype
还支持 text/plain
,不过用得非常少)。
application/json
application/json作为响应头并不陌生,实际上,现在很多时候也把它作为请求头,用来告诉服务端消息主体是序列化的JSON字符串,除了低版本的IE,基本都支持。除了低版本的IE都支持JSON.stringify()的方法,服务端也有处理JSON的函数,使用json不会有任何麻烦。例如:
//请求数据
var data = {name:'jack',sex:'man'};
//请求数据序列化处理
JSON.stingify(data);//结果:{'name':'jack','sex':'man'};
text/xml
HTTP---Post提交数据的几种类型相关推荐
- 话说接口测试Post请求提交数据的四种类型,一篇文章整的明明白白
详解Post请求 前言 常见的post提交数据类型有四种: 第一种:application/json 第二种:application/x-www-form-urlencoded 第三种:multipa ...
- form表单、控制器中接收表单提交数据的4种方式
Form表单 这篇文章主要讲的是form表单的提交 之前我们接触过的form表单元素是在Bootstrap框架里面,这次也将用到Bootstrap框架去布局(见图表1)通过Bootstrap框架布局呈 ...
- POST提交数据时四种常见的数据格式
最近项目部署到新环境tomcat+mysql,想看看项目部署成功没有,就用soupui调对应接口开测试,soupui使用比较简单,给上接口地址,入参xml报文,把入参的media Type设置为app ...
- 张驰课堂:六西格玛数据的几种类型与区别
六西格玛是以一种数据为决策依据的方法论,它在日常工作中应用广泛,能帮助解决各种疑难杂症.但很多六西格玛爱好者对数据的几种类型和区别并不熟悉,张驰课堂在此给大家做个简单介绍: 数据的四种类型分别为:定类 ...
- 向服务器端提交数据的两种方式
朴素版: ...
- form表单提交数据的两种方式——submit直接提交、AJAX提交
submit提交 form表单本身提供action属性,在action属性中填写数据提交地址后,点击submit类型的按钮即可将数据提交至指定地址,代码如下: <form action=&quo ...
- ajax java对象返回前台少了属性_AJAX常见提交数据的三种方式
一.键值对方式提交 AJAX提交 控制器接收 方式1:属性接收 @RequestMapping("stu/add") @ResponseBody public HashMap ad ...
- vue开发入门篇(二)-axios POST提交数据的三种请求方式写法
1.Content-Type: application/json let data = {"code":"1234","name":&quo ...
- MySQL查询数据中每种类型的占比
查询案件表中每种案件的占比 使用CONVERT函数只保留统计结果的2位小数 CONVERT( 数字 , DECIMAL(10,2) ) SELECT case_type AS '类型',CONVER ...
最新文章
- android ndk程序UnsatisfiedLinkError解决方案
- 2014届华为校园招聘机试题2
- 云服务器带宽如何计算,云服务器怎么选择带宽
- 模拟实现string其中的一些知识点
- dataframe iloc_如何使用iloc和loc 对Pandas Dataframe进行索引和切片
- rabbitmq报错:PRECONDITION_FAILED - parameters for queue ‘test-1‘ in vhost ‘/‘ not equivalent
- 业务 T+1 T+2
- Android学习--写一个发送短信的apk,注意布局文件的处理过程!!!
- 心理测评软件php mysql_中小学版心理测评档案管理系统
- 破解无线路由 backtrack BT5 Linux R3 安装 SpoonWep2.deb
- CSS 的 hsl() 和 hsla() 函数(设置颜色的方式之一)
- Scratch www 系统搭建
- 习题4-1 Xiangqi UVA - 1589
- html怎么修改背景图片,css怎么设置背景图片?
- Tomcat 运行 maven项目报错 com.sun.faces.config.ConfigureListener
- Mapper method 'com.XXX.dao.XXXMapper.XXX' has an unsupported return type: class XXX
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
- 【华为OD机试真题 C++】数字涂色 【2022 Q4 | 100分】
- 【21天python打卡】第9天 基础技能(2)
- 1一10到时的英文单词_1到10的英文单词-从1到10的英文-英语-庄影纬同学