一,简介
Get和Post是超文本传输协议(HTTP)的两种方法:
· GET - 从指定的资源请求数据。
· POST - 向指定的资源提交要被处理的数据(修改数据)。
二,从广义上区分
1,网络上有很多文章认为广义上GET和POST只是一个或两个TCP数据包的问题
如:https://zhuanlan.zhihu.com/p/22536382,文章的作者认为 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
2,两种方法没有任何区别
其实如果我们认真研究HTTP1.1协议 HTTP1.1协议中文版-RFC2616 发现:
· 协议的规定是客户端要想等待100响应,它必须发100-continue,如果没有body,它不能发100-continue,也就是说客户端可以自己选择,并没有规定是否一定要分两次发
· 也就是说Get请求如果带上body,浏览器只要支持,也能发送两个包。所以上文的那篇文章既不属于广义也不属于狭义,四不像。
三,从狭义上区分
因为客户端和服务端的约束,或者世俗形成的约定
· Get是幂等的,Post不是(幂等:多次请求对数据时安全的)(所以在缓存,浏览器历史和书签方面有区别)
· Post请求比Get请求更安全,Get请求可能会把账号密码直接带在Url
· 有的浏览器可能对URL有长度限制,所以Get的发送数据是有大小限制的(其实很多服务器框架也对request body有大小限制)
· URL只能传ASCII字符,所以Get的参数只能用ASCII编码,Post没有限制
· 编码类型区别,Get只能是 application/x-www-form-urlencoded, Post可以是application/x-www-form-urlencoded 或 multipart/form-data