网络协议学习——HTTP协议POST方法的格式
来源:互联网 发布:淘宝助理如何使用 编辑:程序博客网 时间:2024/05/16 14:54
关于http的介绍这不赘述,主要总结下post方法里不同形式的body的提交格式。
先谈谈get与post的区别
很多人说get方法比post方法安全,我本人,这是个片面的说法。在本地环境下,post的参数通常不会保存在浏览器历史里,在提交请求时,get方法的参数直接放在URL上,而post方法则是放在body里,相比于get,post不能直接看到所提交的参数。
想象一下,如果提交的密码是一个参数,而且用get方法,这就会直接将密码暴露在URL中,显然这很不安全。而post不会把参数放在URL中,就是安全的吗?大错特错,下面是通过打开浏览器调试模式查看一个登陆请求的信息
在请求信息传输的过程中,http协议的post方法并不能对提交的参数起到保密作用。get和post
get与post的区别应该是这样的
post请求的格式
post请求包含两部分,请求头(header)和请求体(body)。先来看一个简单的post请求所携带的内容。
其中该请求的body携带两个参数,param1与param2,其值的java和algorithm。不难发现,参数与头部信息之间有一“空行”,该空行就是一head与body的分割标志,实质上是字符串”\r\n\r\n”作为分隔线。
请求头(header)
请求头包含一系列与请求有关的信息,第一行 POST / HTTP/1.1 表明这是一个post请求,http版本为1.1。
接下来的几行都是与该请求有关的信息,其中Content-Type与content-length是来用于描述请求体(body)的数据类型和数据总长度的。
请求体(body)
请求体格式变化很灵活,可以是纯文本,也可以是二进制数据。必要时需要在请求头(header)的Content-Type属性里声明。常用的纯参数提交的post请求格式如下
x-www-form-urlencode格式
可以发现,请求体(body)的参数实质上也是一个字符串,跟get请求放在URL后面的参数是一样的格式,参数1=值1&参数2=值2….. 整个字符串是被urlencode的,但是这里由于参数是纯英文字母并且不包含特殊字符体现不出来。
除此之外,body还可以是其他格式类型的数据,例如纯文本,纯二进制(通常用来单文件传输)
(body是任意类型纯文本)
(body是纯二进制)
Multipart/form-data格式
既然body数据可以纯文本也可以纯二进制,那么可不可以是文本和二进制的混合型呢?这必须是可以的,因此有了Multipart/form-data格式。
在form-data格式里,header里的Content-Type的值为 Content-Type: multipart/form-data; boundary={#boundary},接着是请求体变成了一种固定的格式,有多个提交”参数”,这里的”参数”可以是文本信息,也可以是二进制数据信息,这里的每一个参数被称为”part”,因此这种格式称为Multipart。
格式说明
:需要在Content-Type里说明,表明这个请求体的格式为Multipart/form-data。
:{#boundary}是一个随机的字符串,紧接在Content-Type: multipart/form-data的后面,这个随机字符串将在请求体中充当“分隔符”的角色,用来分隔多个part,在请求体的最后为 {#boundary}– (注意是{#boundary}拼接上两个”-“),用来表明请求体的内容到此结束。{#boundary}的值是随机的,原则上{#boundary}的值随机性越高越好,因为如果每个part里也恰好包含{#boundary}就很尴尬了,但这个概率还是很低的。
:在两个{#boundary}之间的内容就是每一个part的数据,可以是纯文本数据,也可以是二进制数据。part里也可以被分为header和body,这里它为“小头部”吧。
当这一个part是纯文本参数时,只需要声明 Content-Disposition: form-data; name=参数名 即可,紧接着是”\r\n\r\n”分割,下面的就是参数的值了。
当这一个part是文件的二进制数据时,小头部通常为
Content-Disposition: form-data; name=参数名; filename=文件名
Content-Type: image/png(文件类型)
紧接着是”\r\n\r\n”分隔符,直至下一个{#boundary}分隔符出现为止,都为文件的二进制数据。
小结
form-urlencode 和 form-data 是常用的两种post格式,前者的请求体内容是纯文本或纯二进制,常用语纯文本参数的提交,单文件传输。 form-data能够混合传输文本与二进制,相比于form-urlencode,form-data还能够多文件传输。
- 网络协议学习——HTTP协议POST方法的格式
- iOS HTTP协议的get,post方法
- Http协议的格式
- Android中基于Http协议的网络通信的两种方法Get和Post
- http协议post数据标准格式
- http协议post数据标准格式
- HTTP协议——请求格式及方法
- Android学习笔记---28_网络通信之通过HTTP协议实现文件上传,组拼http 的post方法,传输内容
- HTTP协议 - 协议格式
- HTTP协议 - 协议格式
- HTTP协议 - 协议格式
- HTTP协议 - 协议格式
- HTTP协议 - 协议格式
- HTTP协议 - 协议格式
- http协议的post请求
- 网络请求,HTTP协议 ,GET,POST
- Unity3D HTTP协议 网络通信 post get
- 关于网络协议 HTTP 4 之POST
- Mac Osx下腾讯云centos7.2配置
- 解决苹果微信浏览器下拉回弹效果
- unity开发 斗地主算法—提示AI(提示出牌)
- 想学习PHP的同学请切记以下几点!
- Windows上安装oracle后创建新用户
- 网络协议学习——HTTP协议POST方法的格式
- 【安全牛学习笔记】SSL、TLS拒绝服务攻击和补充概念
- ts中引用js文件(ionic3项目)
- python常用算法
- python官方文档陌生词中易混淆的单词
- windows php 添加环境变量
- [RK3288][Android6.0] 调试笔记 --- 双屏显示内核Patch
- Android 命令行构建和签署APK
- JSShell:一个基于python的交互式Shell