简单谈谈 GET 与 POST 的区别

前言

HTTP(超文本传输协议) 是目前互联网上应用最为广泛的一种 网络协议 ,Web 网络中 客户端(Client)服务器端(Server) 的通信就是建立在 HTTP 协议上。

Communication between Client and Server.

HTTP 定义了几种客户端向服务器端发出请求的方法,如 GET、POST、HEAD、DELETE、OPTIONS、TRACE、CONNECT 等。但最常用的还是 GET 与 POST 方法,这两个方法之间的区别也是很多互联网公司面试官喜欢问的问题,下面笔者就来简单谈谈。

GET 方法

1.GET 方法主要用于对服务器资源的获取。根据 HTTP 规范 ,它应该是 安全 的和 幂等 的。

安全 指的是它的操作应该是无损害(non-destructive)的。通过 GET 方法,你(客户端)仅仅是从服务器端获取信息,而不会增加、修改数据,不会更改服务器上的资源。

幂等 指的是客户端对同一 URL 的多次请求应该返回同样的结果。

2.GET 请求的查询字符串(键值对)是随 URL 一起发送的。URL 和传输数据以 ? 分割,参数之间以 & 相连,如 /test/demo_form.asp?name1=value1&name2=value2

正因如此,处理敏感数据(如密码)时,不应使用 GET 方法。

3.GET 方法传输数据的长度是有限制的。

虽然在 HTTP 规范中,GET 请求数据的长度和 URL 长度都是无限制的,但实际上,大多数浏览器会限制 URL 长度(如 IE 浏览器限制在2083 bit)。因此 GET 请求传输数据的长度会有所限制。

4.GET 请求可以被浏览器缓存。

因此,通过 GET 方法返回的数据可能是浏览器缓存的数据。

5.GET 请求保留在浏览器历史记录中且可被收藏为书签。

笔者认为这一点也是 查询字符串会随 URL 一起发送 的缘故。

6.GET 方法传输的数据只能是 ASCII 码格式,否则需要 URL 编码才能进行传输。

这也是由于 URL 的编码格式采用的是 ASCII 码。

POST 方法

1.POST 方法主要用于向指定的资源提交数据。服务器端会获取这些数据并处理,然后进行回应。

也就是说,POST 请求的操作是有损害(destructive)的,在发出请求的同时会有数据传送到服务器端,你(客户端)会对服务器端的资源进行更改。

2.POST 请求的查询字符串(键值对)是在该请求的 HTTP 消息主体(request body)中发送的

1
2
3
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

正因如此,POST 请求相对 GET 请求在数据传输方面更加安全。(注意:此 安全 区别于上文提到的 GET 方法的安全性)

3.POST 方法传输的数据长度没有限制。

在 HTTP 规范中,没有对 POST 请求传输的数据长度进行限制,而 POST 方法不依赖 URL ,所以没有限制。

4.POST 请求不会被浏览器缓存。

如果你想,也可以通过手动设置的方法让浏览器进行缓存,不过通常不会这样做。

5.POST 请求不会被保存在浏览器历史记录中,因此也无法被收藏为书签。

6.POST 方法传输的数据对格式没有要求,比如,它允许是二进制数据。

结语

以上就是笔者对于 HTTP 协议中 GET 方法与 POST 方法二者区别的理解。若在以后学习过程中有新的发现或理解,笔者会及时进行更新。

------ 本文结束 ------
坚持原创技术分享,您的支持将鼓励我继续创作!