POST请求中四种常见的提交数据方式
1.项目八股
2.POST请求中四种常见的提交数据方式
HTTP:应用层规范
GET、POST、OPTIONS、PUT、DELETE等几种都是请求方法。
格式为请求行,请求头,请求体,类似于下面这样
<method> <request-URL> <version> <headers> <entity-body>
这里主要谈谈POST提交数据的方式,因为服务器上传数据需要通过POST。
POST提交的数据需要放在消息体里,然后要能够被服务器成功解析才能保存或者查询或者修改。
解析就需要提供数据格式。
Content-Type:指明消息编码方式
服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。下面就正式开始介绍它们。
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的默认值,缺省情况下消息体就是按key1=val1&key2=val2 的方式进行编码。无分割符号,回车之后接着就是编码内容。
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/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
首先生成boundary分割字段,然后下面每次都是以boundary的值补上--开头开始,接着是内容描述信息和回车,回车过后是这个字段的具体真实内容,可能是文本字符串可能是二进制,如果是文件还会包括文件名,结尾是以--boundary的值--作为结束。
webserver项目中使用到的上传文件就是使用这种方式
application/json
这种Content-Type在响应头里一直是被广泛使用的,因为json返回序列化的字符串规范在跨平台很流行,支持很复杂的结构化数据
但是请求头也可以使用这个,目的是告诉服务器这个请求的消息主题是JSON字符串,服务器有处理这种规范的数据,所以不麻烦。
POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]}
text/xml
使用xml作为请求编码方式,这没太多好说的,简单,够用,所有语言都支持
POST http://www.example.com HTTP/1.1 Content-Type: text/xml <?xml version="1.0"?> <methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>41</i4></value> </param> </params> </methodCall>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)