get和post的区别:
get和post都是HTTP协议里的请求方法。
应用层的区别如下:
请求缓存:GET 会被缓存,而post不会
收藏书签:GET可以,而POST不能
保留浏览器历史记录:GET可以,而POST不能
用处:get常用于取回数据,post用于提交数据
安全性:post比get安全
请求参数:querystring 是url的一部分get、post都可以带上。 get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)
请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制
原因:
对于缓存、书签、浏览器记录:归根到底还是请求方式不同 。get使用的url可以完成上述操作,而对于把信息存在请求体body里的post则不行。
对于用处:HTTP协议基于的TCP/IP完成,get,post实质都是TCP链接,但是由于get使用拼接url的方式导致有字符数的限制,所以容易提交受限(理论上如果不超过字符数限制也可以完成数据提交),而使用请求体的post则不用担心因字符数而受限。
对于安全性:get的url会被劫持,而post使用请求体则不会。
对于请求参数:两种支持的编码方式不同。
对于参数长度限制:get请求需要拼接url,由于浏览器自身性能考虑,所以对URL的长度进行限制。而post是body请求体。
传输层的区别如下:
GET产生一个TCP数据包;POST产生两个TCP数据包。
注意:post比get相对安全,在网络良好的情况下,时间差可以忽视。在网络不好的情况下,post两个包可以更好的保证数据完整性。(不是所有的浏览器post都是两个包,比如Firefox)。
菜鸡一枚 欢迎各位大佬指正!