get 和 post请求的区别

1.基本区别:

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

可以见下面表格:


比较get与post

与http其他请求方法比较:


与其他http请求方法比较

深入理解:

GET和POST是HTTP协议中的两种发送请求的方法(实现上面)。

HTTP是基于TCP/IP关于数据如何在万维网中如何通信的协议。(HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。)

GET产生一个TCP数据包;POST产生两个TCP数据包。(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,(如果header里面带了Expect: 100-continue,服务器响应100 continue,若不带(或者超时),直接发data),浏览器再发送data,服务器响应200 ok(返回数据))

Chrome 55.0.2883.95,two packets:YES

Safari 10.0.2, two packets:YES

Firefox 49.0, two packets:NO

实际上:真正的区别从语义上面,get是获取指定资源,post是请求符合对指定资源做处理。

get:安全、幂等、可缓存,报文主体没有语义。

post:不安全,不幂等,不可缓存。



个人公号:【排骨肉段】,可以关注一下。

你可能感兴趣的:(get 和 post请求的区别)