[三分钟知识系列]Get和Post的区别

170 阅读3分钟

前言

Get和Post是前端开发中用的比较多的,虽然不知道一些知识也能开发,但是知道的话开发上会减少一些bug的出现。现在借我三分钟,交会你明白GET和POST的区别以及一些知识。

背景

我们比较常用的请求方法有 put(上传资源)、delete(删除资源)、get(获取资源)、post(修改资源) 这四种。但是这些的功能只是相对的,就是说一个原则,当然你不照着这样也是可以的,就是不规范。

在这其中,其实请求都是在我们进行了TCP三次握手后才开始,以前的网页是串行连接的,就是说一个连接处理一个http请求,所以那时候网页常常更新很慢,每次得建立很多次连接,浪费很多资源。后面慢慢出现了持久化连接、管道化持久连接,这样我们的网页的性能就慢慢快起来了。

持久化连接

简单来讲,持久化连接就是在保留连接来处理很多的http请求。串行连接是一个连接处理一个http请求,请求完了就解放这个连接,而持久化是当所有的请求处理完了再释放这个连接。我们现在网页请求传输就是这个模式

管道化持久连接

就是把这些请求都排队,不等响应,一个一个发送请求的同时接收相应的响应。当然这个连接有个不好的点就是,如果队列中有个请求因为网络原因中断了,那么就清空所有接收到的响应,然后再重新进行请求。如果请求所做的事仅仅是获取信息,那么影响不大,但是要是请求所处理的是对数据的增删改的话,那么相当于多次进行数据处理。

幂等性

简单来说就是一个http请求,进行多次的请求都不会处理数据,而且返回同样的结果。就是这个请求仅仅是查找数据不对数据进行处理。

GET vs POST

说到get和post的区别,我想大概很多人都是想到安全性,诚然有这个点,但是完整的应该是这样的:

  • POST安全,不会作为url的一部分,不会被缓存、保存再服务器日志和浏览器记录中。
  • 因为url的长度是有限制的,所以get的长度是有限制的,而post是没有这个限制的。
  • get传输数据类型是有限制的,只能传输ASCI码的,而post是可以传输很多数据类型的。
  • post的传输速度比get的慢很多。
  • get是必须遵守幂等性的,而post不是。
  • POST不支持管道化持久连接。

为什么post的传输速度会比get的慢?

post的传输过程:

  • 第三次握手后,客户端发送post请求头
  • 服务端收到请求头返回100状态后,继续响应。
  • 客户端收到100状态,发送数据。
  • 服务端返回200状态。

get的传输过程:

  • 第三次握手后,客户端发送请求
  • 服务器收到请求和数据,返回200状态和响应数据。 所以,get比post快是因为缺少了将请求头先发送给服务端确认的时间。