区别就是一个词:
~~~~~~~ 大同小异(本质上来说都是TCP链接,并无区别;但具体的格式、规定限制又有所不同)。
具体如下:
1.本质
GET和POST是什么?
~~~~~~~
HTTP协议中的两种发送请求的方法。
HTTP协议是什么?
~~~~~~~
HTTP是基于TCP/IP的网络传输的应用层协议。
可以看到实际都是同一个传输层协议,都是TCP链接,无实质区别。
2.区别
- 报文格式上:
~~~~~~~ 不带参数时,区别只是请求行的前几个字符(方法名)不同;
~~~~~~~ 带参数时,get方法的参数应该放在 url 中(参数是写在 ? 后面,用 & 分割),post方法参数应该放在请求体(body)中。
如果服务器支持,在post请求的url中写上参数,在get请求的body中写上参数,也是可以的,这样二者就在格式上没有区别了,只不过get方法不能保证body一定能被接收。
在此处将引出来一个问题:
post 方法比 get 方法安全?
post比get安全体现在数据在地址栏(url)不可见,这是显示表现;从传输的角度来说,都是不安全的,HTTP 在网络上是明文传输的,只要在网络节点上抓包,就能完整地获取数据报文。要起安全就只有加密,也就是 HTTPS。
- 使用上:
~~~~~~~ 与post相比,get更简单也更快,并且在大部分情况下都能用。但在以下情况中,请使用 POST 请求:
(1) 无法使用缓存文件(更新服务器上的文件或数据库)
(2) 向服务器发送大量数据(post没有数据量限制,url的最大长度为2048个字符)
(3) 发送包含未知字符的用户输入时,post比get更稳定也更可靠(get方法数据类型只能是ASCII字符)