HTTP请求中, Get 和 Post 的区别

在 HTTP 请求中, 最主要和常见的方法就是 Get 请求和 Post 请求.

1. 什么是 Get 请求

Get: 请求指定的页面信息
值得注意的是: Get 方法只是用户获取和查询数据, 并不会对服务器上的数据产生修改, 因此, 从这点可以得知, 它是数据安全的.

2. 什么是 Post 请求

Post: 向指定资源提交数据进行处理请求, 也就是说, 它可以向服务器发送修改请求, 从而修改服务器数据.

3. Get 和 Post 的区别

  1. Get 请求不允许带请求体, 而 Post 请求允许带请求体
  2. 从语义上讲: Get 请求属于 Select 方法, 而 Post 请求属于 Insert 方法.
  3. Get 请求具有幂等性: 针对同一个 URL, 多次发起 Get 请求, 服务器的数据不应该有任何变化; 对于 Post 请求而言, 就可能会修改服务器数据.
  4. Get 会发送一个 TCP 数据包, 而 Post 会发送两个 TCP 数据包.

注意:

  1. 实际操作过程中, Get 也可以完成 Post 操作. 即将 Post 请求的请求体放入 Get 的 Query String 中. 但是这样做的缺点是: 由于 Query String 是一种明文, 所以用户在使用 Get 请求时, 就可以看见 Query String 中的内容.
    但是 Get 和 Post 都有自己的语义, 所以尽量不要混用.
  2. 关于 Get 发送一个 TCP 数据包和 Post 发送两个 TCP 数据包:
    Get 在向服务器发送 HTTP 请求时, 会将 header 信息连同 data 信息一起发送.
    Post 在向服务器发送 HTTP 请求时, 会先发送 header 信息, 直到服务器响应回 100 状态码后, 才会继续发送 data 信息.

    既然 Post 需要两步, 而 Get 只需要一步, 说明 Get 比 Post 更有效, 那么是否可以通过使用 Get 来替换掉 Post 从而优化性能呢?

    1. Get 和 Post 都有自己的语义, 尽量不要混用
    2. 如果网络环境好的话, 发一次包的时间和发两次包的时间几乎没有什么差别. 但是如果网络环境差的话, 两次包的 TCP 在验证数据包的完整性上, 有很大的优势
      (如何验证数据包的完整性, 服务端接收到 header 的信息后, header 中会有数据的长度和数据大小等信息, 等到服务器再次接收到 data 信息后, 可以将其与 header 信息进行比对, 从而判断是否有丢包或者包损坏的情况)
    3. 并不是所有的浏览器对于 Post 都会发两个数据包. 比如: Firefox 浏览器中, Post 只会发送一次.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值