最直观的区别是Get把参数包含在URL中,Post通过request body传递参数。
Http请求报文由四部分组成:请求行,请求头部,空行,请求数据。
1.请求行
请求行由请求方法字段,URL字段和Http协议版本字段3个字段组成他们用空格分隔。比如Get /data/info.html HTTP/1.1
2.请求头部
HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。
请求头中包含了很多请求规范,形成约束,对客户的数据进行约束。
3.空行
它的作用是一个空行,告诉服务器请求头部到此为止了。
4.请求数据
若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据
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是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
HTTP的地层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP连接。GET和POST能做的事情是一样一样的。你要给GET加上request body ,给POST带上url参数,技术上是完全行得通的。
HTTP请求像是运输信息的汽车,浏览器等的像是卸载信息的公司。
GET和POST还有一个重大区别,
GET只产生一个数据包,而POST产生两个数据包
GET方法一次直接将http header 和data 一并发送出去,服务器响应200(返回数据)
POST浏览器先发送header ,服务器响应100 continue ,浏览器再发送data ,服务器响应00 ok (返回数据)。