POST和GET请求都是向服务器提交数据,并且都会从服务器获取数据。
区别:
传送方式:GET通过浏览器的地址栏进行传输,POST通过报文传输。
传送长度:GET参数有长度限制(受限于url长度),而POST无限制。
从浏览器发送的数据包:GET产生一个数据包,而POST则产生两个数据包;
对于GET的请求浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
对于POST的请求浏览器先发送header,服务器响应100 continue,浏览器再发送data,
服务器响应200 ok(返回数据)。
从耗时来看:因为POST请求需要两步,所以耗时高,而GET请求则相对耗时低,速度更快。
从安全性来看:因为GET传输数据是通过URL请求,以字段=value的形式,置于URL后,并用?连接,这个过程用户是可见的,可能会泄露用户的私密信息,如账号密码等。
所以不安全,而POST传输数据通过HTTP的POST机制,将字段与对应值存在请求实体
中发送给服务器,这个过程对用户是不可见的。相对GET来说安全性高些。
从支持的字符集来看:GET方式只能支持ASCII字符,向服务器传的中文字符可能会乱码,POST支持标准字符集,可以正确传递中文字符。
GET请求通过: 前端通过axios(“url”,{params:{变量名或者key:value形式}})
后端通过this.ctx.request.query 获取,获取到的是一个对象,{key:value}形式
POST请求通过:分两种:一种是没有文件时,前端用axios工具做post请求,格式为:
axios.post(“url”,{key:value}),后端通过 this.ctx.request.body 获取字段,获取到的是对象{key:value}形式
有文件时:前端通过表单对象,let fdata = new FormData(),使用它的append方法添加字段和文件,文件使用file表单.files获取 获取到的是一个files数组。
后端分别通过 this.ctx.request.body 获取字段,this.ctx.request.files 获取文件