写在前面
get 和 post 都是浏览器通过 HTTP 协议发送请求时,HTTP 定义的请求方法,get 和 post 是常用的两种方法,HTTP 请求方法除了 get 和 post 外,还有 put、delete等等。即在早期的划分中是
增(put) 删(delete) 改(post) 查(get)
那么 get 和 put 方法的区别是什么呢?
1 一般区别
- GET 方法是直接将参数挂在 URL 上进行传递,而POST 方法是通过 request body 传递参数,因此,GET 方法是不安全的,POST 方法相比于 GET 方法是更安全的。
- GET请求在URL中传送的参数是有长度限制的,一般是1024个字节,而POST传递的参数没有长度限制。
- GET 的请求参数是放在 URL 中的,POST 的请求参数是放在消息提里面的。
- GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
- GET 产生的 URL地址 可以被加入收藏栏,而 POST 不可以。
- GET 请求会被浏览器主动缓存,而 POST 不会。
- GET 请求只能进行 URL 编码,而 POST 请求支持多种编码
- 对于参数的数据类型,GET 方法只接受 ASCII 字符,而 POST 没有限制。
- GET 请求的参数会被完整地保留在浏览器的历史记录里,而 POST 请求中的参数不会被保留
- GET 因为只需要发送请求头,因此只需要一个请求报文,而 POST 需要发送请求头和请求体,需要两个请求报文
- GET 是获取内容,是幂等的,即多次 GET 不会改变数据库,而 POST 是修改内容,是不幂等的,多次 POST 可能会改变数据库。
2 实际区别
实际上,上述列举的 GET 和 POST 的区别并不严谨,POST 也可以将部分参数放到 URL 中,GET 也可以将部分参数放到消息体中,GET 和 POST 实际上的区别如下:
- 语义上的区别,GET 是用于获取数据,POST 是用于提交数据
- GET 产生一个 TCP 数据包,POST 产生两个 TCP 数据包,因为对于 GET 请求,浏览器会将 HTTP header 和 data 一并发送出去,服务器返回数据响应200。而对于 POST 请求,浏览器会先将 HTTP header 发送出去,浏览器接收后响应 100 continue,然后浏览器再发送 data 数据,服务器返回数据响应200。