一、GET和POST是什么
GET和POST,两者是HTTP协议中发送请求的方法
1.1 GET
GET方法请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据
1.2 POST
POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
二、GET和POST的区别
GET和POST请求本质上都是 TCP链接,使用的也都是同一个传输层协议,所以在传输上没有区别。
但是由于 HTTP 的规定和浏览器/服务器的限制,导致它们在应用过程中会体现出一些区别:
-
GET在浏览器回退时是无害的;POST会再次提交请求
-
GET产生的URL地址可以被BOOKmark;post不可以
-
GET请求会被浏览器主动cache;POST不会除非手动设置
-
GET请求只能进行URL编码;POST支持多种编码方式
-
GET请求参数会被完整保留在浏览器历史记录里;POST的参数不会被保留
-
GET请求参数的数据类型只接受ASCII字符;POST的参数没有限制
-
GET的安全性比POST的低。因为参数直接暴露在URL上,所以不能用来传递敏感信息。
-
GET参数通过URL传递,POST放在Request body中
-
参数长度: HTTP协议没有对
Body和URL的长度限制,对URL限制的大多是浏览器和服务器的原因。
服务器处理长URL要消耗较多的资源,为了性能和安全考虑,会给 URL 长度加限制
- 安全 POST比GET 安全,因为数据在地址栏上不可见
然而,从传输的角度来说,他们都是不安全的,因为HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文
只有使用HTTPS才能加密安全
- 数据包 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次