参考:https://www.cnblogs.com/yaojyhappy/p/9447160.html

Http Header里的Content-Type一般有这三种:

  1. application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。
  2. multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
  3. 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提交数据的几种类型相关推荐

  1. 话说接口测试Post请求提交数据的四种类型,一篇文章整的明明白白

    详解Post请求 前言 常见的post提交数据类型有四种: 第一种:application/json 第二种:application/x-www-form-urlencoded 第三种:multipa ...

  2. form表单、控制器中接收表单提交数据的4种方式

    Form表单 这篇文章主要讲的是form表单的提交 之前我们接触过的form表单元素是在Bootstrap框架里面,这次也将用到Bootstrap框架去布局(见图表1)通过Bootstrap框架布局呈 ...

  3. POST提交数据时四种常见的数据格式

    最近项目部署到新环境tomcat+mysql,想看看项目部署成功没有,就用soupui调对应接口开测试,soupui使用比较简单,给上接口地址,入参xml报文,把入参的media Type设置为app ...

  4. 张驰课堂:六西格玛数据的几种类型与区别

    六西格玛是以一种数据为决策依据的方法论,它在日常工作中应用广泛,能帮助解决各种疑难杂症.但很多六西格玛爱好者对数据的几种类型和区别并不熟悉,张驰课堂在此给大家做个简单介绍: 数据的四种类型分别为:定类 ...

  5. 向服务器端提交数据的两种方式

    朴素版:                                                                                                 ...

  6. form表单提交数据的两种方式——submit直接提交、AJAX提交

    submit提交 form表单本身提供action属性,在action属性中填写数据提交地址后,点击submit类型的按钮即可将数据提交至指定地址,代码如下: <form action=&quo ...

  7. ajax java对象返回前台少了属性_AJAX常见提交数据的三种方式

    一.键值对方式提交 AJAX提交 控制器接收 方式1:属性接收 @RequestMapping("stu/add") @ResponseBody public HashMap ad ...

  8. vue开发入门篇(二)-axios POST提交数据的三种请求方式写法

    1.Content-Type: application/json let data = {"code":"1234","name":&quo ...

  9. MySQL查询数据中每种类型的占比

    查询案件表中每种案件的占比 使用CONVERT函数只保留统计结果的2位小数 CONVERT(  数字 , DECIMAL(10,2) ) SELECT case_type AS '类型',CONVER ...

最新文章

  1. android ndk程序UnsatisfiedLinkError解决方案
  2. 2014届华为校园招聘机试题2
  3. 云服务器带宽如何计算,云服务器怎么选择带宽
  4. 模拟实现string其中的一些知识点
  5. dataframe iloc_如何使用iloc和loc 对Pandas Dataframe进行索引和切片
  6. rabbitmq报错:PRECONDITION_FAILED - parameters for queue ‘test-1‘ in vhost ‘/‘ not equivalent
  7. 业务 T+1 T+2
  8. Android学习--写一个发送短信的apk,注意布局文件的处理过程!!!
  9. 心理测评软件php mysql_中小学版心理测评档案管理系统
  10. 破解无线路由 backtrack BT5 Linux R3 安装 SpoonWep2.deb
  11. CSS 的 hsl() 和 hsla() 函数(设置颜色的方式之一)
  12. Scratch www 系统搭建
  13. 习题4-1 Xiangqi UVA - 1589
  14. html怎么修改背景图片,css怎么设置背景图片?
  15. Tomcat 运行 maven项目报错 com.sun.faces.config.ConfigureListener
  16. Mapper method 'com.XXX.dao.XXXMapper.XXX' has an unsupported return type: class XXX
  17. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
  18. 【华为OD机试真题 C++】数字涂色 【2022 Q4 | 100分】
  19. 【21天python打卡】第9天 基础技能(2)
  20. 1一10到时的英文单词_1到10的英文单词-从1到10的英文-英语-庄影纬同学

热门文章

  1. 机器学习HMM模型算法实例
  2. 概述什么是OSGi框架,OSGI能解决什么?
  3. android 飞机大战背景图片,安卓飞机大战(一) 背景移动
  4. 关于PMSM电机FOC驱动的一些问题
  5. cgroup限制虚拟机内存的来龙去脉
  6. 第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列
  7. Qt 控制台程序:和原生C++的融入
  8. 控制理论结构图——一目了然全面了解控制理论(这个已不是最新的)
  9. HIVE 内存溢出常见问题
  10. 计算机二级ms难度,为什么二级ms通过低