【计算机网络】【HTTP】GET和POST的区别

40 阅读2分钟

一、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协议没有对 BodyURL 的长度限制,对URL限制的大多是浏览器和服务器的原因。

服务器处理长URL要消耗较多的资源,为了性能和安全考虑,会给 URL 长度加限制

  • 安全 POST比GET 安全,因为数据在地址栏上不可见

然而,从传输的角度来说,他们都是不安全的,因为HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文

只有使用HTTPS才能加密安全

  • 数据包 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)

对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok

并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次