GET和POST区别

区别

GET是通过URL提交数据,因此GET可提交的数据量就跟URL能达到的最大长度有直接关系,实际上HTTP协议对URL长度是没有限制的,限制URL长度大多数是浏览器或者服务器的配置参数。

同样HTTP协议没有对POST进行任何限制,一般是受服务器配置限制或者内存大小限制。

如果有人而已伪造content-length很大的包头,但实际上发送content-length很小的请求,这样服务器会一直干等,直到超时,当然服务器是可以通过设置来避免该问题的。

GET是通过URL方式请求的,可以直接看到,明文传输。POST是通过请求header请求,可以开发者工具或抓包工具可以看到,同样也是明文。GET请求会保存在浏览器历史记录中,还可能会保存在Web的日志中。

根据http的设计,大家在看到get的时候,都期望这个请求对服务器没有修改,看到post的时候,都认为对服务器产生了修改。

幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同。

按照RFC规范,PUT、DELETE和安全方法都是幂等的,虽说是规范,单服务端实现是否幂等是无法确保的。引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前时区连接,如果方法是幂等的,就可以放心的重复发一次请求。这也是浏览器在后退、刷新时遇到POST会给用户提示的原因:POST语义不是幂等的,重复请求可能会带来意想不到的后果。比如在微博这个常经理,GET的语义会被用在”看看我的Timeline上最新的20条微博”这样的场景,而POST的语义会被用在“发微博、评论、点赞”这种场景中。

参考