HTTP 协议是后台开发必须要了解的协议,因为在后台开发工作中,少不了使用 HTTP 协议进行交互,比如访问 HTTP 服务获取数据或者实现一个 HTTP 服务。当然,HTTP 协议是不仅仅是后台开发需要了解,只要是开发人员都必须要了解。
HTTP 定义了与服务器交互的不同方法,最基本的方法有4种,分别是 GET,POST,PUT,DELETE。URL 全称是资源描述符,我们可以这样认为:一个 URL 地址,它用于描述一个网络上的资源,而 HTTP 中的 GET,POST,PUT,DELETE 就对应着对这个资源的查,改,增,删 4 个操作。到这里,大家应该有个大概的了解了,GET 一般用于获取/查询资源信息,而 POST 一般用于更新资源信息。
在谈论 HTTP GET 和 POST 的区别时,我们不能脱离其使用分场景,就像我们在做阅读理解时要想了解某个句子的具体含义,不能脱离语境。下面就分场景说一下 GET 和 POST 的区别。
浏览器的 GET 和 POST 的区别: (1)作用不同。GET 用于获取资源,POST 用于更新资源; (2)携带数据的方式不同。GET 一般将数据已参数的形式放到 URL 中,虽然 HTTP 标准并未对 URL 长度做限制,但是浏览器在实现时,一般会对 URL 的长度做限制,所以携带的数据有限;POST 将数据放到 Body 中,无长度限制; (3)安全性不同。GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息; (4)幂等性不同。GET 对访问的数据没有副作用,具有幂等性。POST 用于更新操作往往是有副作用的,不幂等。因为幂等性的差别,GET 产生的 URL 地址可以保存为书签,而 POST 不可以。GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。
RPC 接口中的 GET 和 POST 的区别: 在后台 RPC 接口调用中,我们可以利用 HTTP 协议进行通信,此时 GET/POST 不光能用在前端和后端的交互中,还能用在后端各个子服务的调用中。当用HTTP实现接口发送请求时,就没有浏览器中那么多限制了,只要是符合 HTTP 格式的就可以发送。
所以该应用场景下,GET 与 POST 除了语义上区别,在作用上并无区别,GET 可以使用 body 协议数据用于更新远端资源,POST 也可以把数据放到 URL 参数中用于获取远端资源,这完全取决于被调接口的具体实现。
参考文献
[1] 知乎.GET 和 POST 到底有什么区别?