get和post本质上没有区别,都只是http协议中的两种方式,用的都是同一个传输层协议,在传输上没什么不同。
什么是HTTP?
超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。
HTTP 的工作方式是客户机与服务器之间的请求-应答协议。
web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。
举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。
比较get和post,如图
1.get和post报文上的区别:
先下结论,GET 和 POST 方法没有实质区别,只是报文格式不同。
GET 和 POST 只是 HTTP 协议中两种请求方式,而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。
报文格式上,不带参数时,最大的区别就是第一行方法名不同
POST方法请求报文第一行是这样的 POST /uri HTTP/1.1 \r\n
GET方法请求报文第一行是这样的 GET /uri HTTP/1.1 \r\n
是的,不带参数时他们的区别就仅仅是报文的前几个字符不同而已
带参数时报文的区别呢? 在约定中,GET 方法的参数应该放在 url 中,POST 方法参数应该放在 body 中,
当然两种方法本质上都是TCP连接,没有差别,也就是说不按照规范来也是可以的。我们可以在url上写上参数,然后使用post方法,或者是在body中写上参数,使用get方法,当然这些需要服务端的支持。
2.get和post方法安全性上的差异
从网上大部分的解释来看,POST比GET安全,因为数据地址栏上看不见。
然而从传输的角度来说,他们都是不安全的,因为HTTP在网络上是明文传输的,只要在网络节点上捉包,就能完整的获取数据的请求报文。
想要安全传输,也就只有加密,也就是HTTPS。
3.get的长度有限制?最长为1024kb?
get方法提交参数的url数据没有大小限制
HTTP协议没有对url和body的长度限制,对url限制的大多是浏览器和服务器的缘故。
浏览器是浏览器厂商的设定。服务器是因为要处理长的URL需要消耗太多的资源,为了性能和安全,给url长度加以限制。
4.post方法会产生两个数据包?
有些观点中提出,post会将header和body分开发送,先发送header,服务器返回100后,在发送body。
HTTP协议中没有明确说明post会产生两个TCP数据包,而在实际测试中,header和body不会分开发送,
所以,header和body分开发送是部分浏览器或框架的请求方法,不属于post的必然行为。
5.get用于获取数据,post用于提交数据
虽然get的确常被用于获取数据,但post也可以在一些UI框架被用于取回数据。
get和post的用途也是因地制宜的,不是绝对的,要根据实际情况来决定用哪个方法。