请求缓存:
GET 会被浏览器主动缓存,而post则不会,除非手动设置。
收藏书签:
GET产生的url地址可以被收藏,而POST不能。
保留浏览器历史记录:
GET请求参数会被完整保留,而POST不能。
用处:
GET 常用于取回数据,POST用于提交数据
安全性:
POST比GET 安全。因为GET 的URL是可见的,可能会泄露私密信息。
请求参数:
GET传输数据是通过URL请求,将请求参数放在url上,POST的参数是放在Request body里;(这不是http的要求,只是HTML标准对HTTP协议的用法的约定)
GET 只接受ASCII 码字符,而POST没有限制;
GET请求只能进行url 编码,而POST支持多种编码方式。
(get参数以filed(字段)=value的形式,置于URL后,并用"?“连接,多个请求数据之间用”&"连接。)
请求参数长度限制:
浏览器GET 请求长度有限制,GET传输量小,但效率高;POST对参数长度没有限制,所以上传文件用POST。
(在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器/操作系统对URL的长度有限制)
浏览器回退:
GET 请求在浏览器回退时是无害的,POST会被再次提交。
本质区别:
1、http请求的底层协议是TCP/IP,所以POST和GET 请求它们本质上都是TCP连接。但是为了区分POST和GET 请求,就设置GET 请求的参数添加到url后面,POST请求参数添加到请求体中。最重要的区别是:
GET 请求只发送一个TCP数据包,浏览器会把把http header和data一起发送出去,服务器响应200(返回数据)。
POST请求发送两个数据包,浏览器会先发送header建立与服务器的连接,服务器响应100 continue,浏览器再发送data,服务器响应200(返回数据)。但是这个也不是绝对的,有的浏览器(Firefox)POST请求就发送了一次请求。
2、GET请求是幂等性的,POST请求不是。
幂等性是指对同一URL的多个请求应有同样的副作用。