GET/POST区别与参数小结

HTTP的方法

Get和Post的区别

我们讨论到Get方法和Post的区别时,大部分搜索给出的答案都是

  1. Get的参数在URL中,Post的参数在HTTP的报文体Body里
  2. Get参数有大小限制,Post没有大小限制
  3. Get参数不安全,Post安全

以上答案是错误的参考文章99%的人理解错Get和Post的区别讲解为什么错误,我们这里只说结论

  1. HTTP用什么请求和参数在哪里一点关系没有
  2. HTTP协议对参数长度也没限制,大多数和服务器容器的配置有关
  3. HTTP用什么方法都不安全,除非用HTTPS

HTTP的参数

HTTP不管使用什么方法和参数放的位置都没有关系的 这里来介绍有几种放HTTP参数的方式

URL里放参数

在URL里放参数最简单,就是问号+键值对,它存在于HTTP的Header中第一行

包含里两个参数

参数名参数值
param11
param2b

Body里放参数

由于URL里放参数是放在HTTP报文头,而往Body里放参数的方式就有很多种了,如何让接收放识别这些放参数的方法,就靠Content-type

Body参数方式Content-type
Texttext/plain
Formapplication/x-www-form-urlencoded
JSONapplication/json
File不确定
Multipartmultipart/form-data; boundary=X_PAW_BOUNDARY

根据Content-type不同,服务器去读取HTTP Body中参数的方式也不一样

Body不同参数方式介绍

text/plain 文本传输

一般这个。。很少用到

HTTP的报文体中是纯文本,没有任何格式和修饰,服务端就会拿走文本自己处理

application 参数传输

我们最常用到的就是 application 格式的HTTP报文体,其中还分为JSON格式与Form表单格式

Form 表单

这个是最常用的传递参数方式,HTML中都有form标签与其对应,其本身采用Key-Value的方式传递参数

其本身就是简单的把URL参数中?后的字符串移到Body里

所以看其Content-type全称 application/x-www-form-urlencoded 后边代表意思是 X-万维网-FORM表单-URL编码方式

JSON Object

与Form表单同属于一个Content-type分类JSON格式的全称是 application/json 与Form表单不同是,

他的HTTP的Body是一串符合JSON格式的字符串,而不是简单的把URL参数移动到Body内

所以说Json格式比Form更加有效的地方是可以传送Object,而不是简单的Key-Value对,但是还有聪明的小伙子用Form来发Object,参考Spring传JSON参数和文件

File 文件传输

这个也很少用,一般只在返回报文中出现,用于传输 单个文件 ,所以说根据传输的文件不同其Content-type也不同,例如

文件类型Content-type
png图片image/png
pdf文档application/pdf

而HTTP的Body中则是文件的二进制数据

Multipart 复合传输

Multipart的中文直译是 “多个部分” 就是指的不仅可以传输参数(Value)还可以传输文件(File),但是参数和文件之间怎么区分呢?

根据Content-type 除了使用 multipart/form-data 之外还有一个 boundary=X_PAW_BOUNDARY

其中前者代表 多个部分/表单数据 而后者代表boundary(边界),是一个字符串 “X_PAW_BOUNDARY“,由于我用的软件是PAW,所以叫X_PAW,用浏览器可能是其它的字符串,然后在HTTP的Body中我们可以看到它

由上文可以发现,HTTP的Body中使用两个短横线”–”加上boundary字符串作为不同参数的分割,而且不管是值参数(Value)还是文件参数(File)在Boundary内部都有自己的描述信息,并不是URL参数的简单移动

并且在结束的时候,不仅 前缀要加双短横线,后缀也要加,代表结束

结语

通常情况下x-www-form-urlencoded是最常用的传参方法

如果想传递Object可以使用JSON,使用SpringMVC的话需要特殊配置

上传文件用的最多的就是Multipart,Java有专门的Jar包来处理文件上传

原文链接:https://alanli7991.github.io/2016/10/26/HTTP%E8%AF%B7%E6%B1%82GETPOST%E4%B8%8E%E5%8F%82%E6%95%B0%E5%B0%8F%E7%BB%93/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值