GET和POST区别
HTTP协议中发送请求的两种方法
GET一般用于获取/查询资源信息;------从指定的资源请求数据
POST一般用于更新资源信息。-------向指定的资源提交要被处理的数据
GET是不安全的,因为在传输过程,数据被放在请求的URL中,服务器会将请求URL记录到日志中,用户也可以在浏览器上直接看到提交的数据,故GET请求不应在处理敏感数据时使用;
POST的所有操作对用户来说都是不可见的,POST的参数通过request-body传递。
GET传输的数据量小,主要受URL长度限制;
POST可以传输大量数据,对数据长度没有要求,所以在上传文件只能使用POST。
GET请求可被收藏为书签;
POST请求不能被收藏为书签。
GET请求可被缓存;
POST请求不会被缓存。
GET请求只能进行url编码;
POST请求支持多种编码方式。
对参数的数据类型:
GET请求只接受ASCII字符;
POST请求没有限制。
GET请求保留在浏览器历史记录中;
POST请求不会保留在浏览器历史记录中。
还有一个重大的区别:
GET请求产生一个tcp数据包,POST请求产生两个tcp数据包:
GET请求:浏览器把请求头和请求体一起发送出去,服务器响应200 OK(正常返回数据);
POST请求:浏览器先发送请求头,服务器响应100 continue,浏览器才发送请求体,服务器响应200 OK(正常返回数据)。
这样来看,POST请求发送两次数据包比GET只发送一次数据包效率要低,实际情况下:
在网络状态好时,这种时间差别基本可以忽略;
在网络状态不好时,发送两次tcp数据包对于数据的完整性更好;
并不是所有的浏览器POST请求都发送两个数据包,火狐浏览器就一次。