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:不安全,不幂等,不可缓存。
个人公号:【排骨肉段】,可以关注一下。