http中get和post的区别及使用场景
区别
get和post是http协议中的两种请求方式,http是基于tcp/ip的协议。
按照约定:get方法的参数在URL中,post方法的参数在body中。
与post相比,get将参数暴露在URL上,安全性比较差,
其实从传输的角度来说,它们都是不安全的,因为http在网络上是以明文传输的,
只要在网络节点上抓包,就能获取完整的数据报文,要想安全传输,就只有加密。
但是get和post还有一个区别:
get产生一个tcp数据包,post产生两个数据包,
对于get请求,浏览器会把header和data一并发送出去,服务器响应200,
对于post请求,浏览器先发送header,服务器响应100(continue),然后再发送data,服务器响应200,
所以get执行效率会比post高,
不过在网络环境良好的情况下,区别不大。
http协议并没有URL长度的限制,这些是不同的浏览器或服务器做的。
使用场景
若符合下列任一情况,则用get方法:
请求是为了查找资源,html表单数据仅用来帮助搜索;
请求结果无持续性的副作用;
收集的数据及html表单内的字段名称总长度不超过1024个字符。
若符合下列任一情况,则用post方法:
请求结果有持续性的副作用,例如:数据库中添加新的数据行;
使用get方法可能会让URL过长;
要传送的数据不是采用7位的ASCII编码。
在一些框架中,会根据请求方式是get或者post来区别重试机制,
还有接口一些幂等性的设计等,所以规范还是遵守一些的好。
不当之处,请予指正。
参考资料:
在途中#:GET和POST两种基本请求方法的区别
程淇铭:都9102年了,还问GET和POST的区别
奔跑小王子:什么时候用GET?什么时候用POST?