GET和POST区别总结

11 篇文章 1 订阅
9 篇文章 0 订阅

简介

GET 方法

从指定的资源请求获取数据

查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/test/demo_form.asp?name1=value1&name2=value2

.

POST 方法

向指定的资源提交要被处理的数据

查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

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

区别

  1. 参数传递:GET是通过URL传递,而POST放在Request body(消息主体)中。

  2. 浏览器回退:GET是无害的,而POST会再次提交请求(数据会被重新提交)。

  3. 收藏书签:GET产生的URL地址可以被收藏为书签,而POST不可以。

  4. 主动缓存:GET请求会被浏览器主动缓存,而POST不会,除非手动设置

  5. 历史记录:GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  6. 参数编码:GET 只能进行 URL 编码,POST请求可以使用多种编码方式。

  7. 参数类型:GET只接受ASCII字符,而POST没有限制。

  8. 参数长度:GET方法的参数长度限制主要来自于浏览器和服务器对URL长度的限制。,一般在2000个字符左右,超过这个长度,浏览器可能会截断URL。POST方法理论上没有大小限制,实际中服务器通常会对请求体的大小进行限制。

  9. 安全性:GET没有POST安全,因为参数直接暴露在URL上(所发送的数据是 URL 的一部分),所以不能用来传递密码等敏感信息。POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

  10. 幂等性:GET方法是一种安全的和幂等的方法,它只用于获取资源,而不会对服务器上的资源进行修改,因此可以无限次重复请求而不会对服务器产生影响。POST方法则可能用于修改服务器上的资源,因此不是幂等的。 (幂等表示执行相同的操作,结果也是相同的)

  11. 数据包:GET 请求会把请求报文一次性发出去,而 POST 可能会分为两个 TCP 数据包:浏览器会先将请求头发送给服务器,待服务器响应100 continue后,浏览器再发送请求数据,服务器最终响应200 ok(返回数据)。这样的过程使得POST方法在网络传输上具有一定的特性。

.

关于TCP数据包

GET产生一个TCP数据包;POST可能产生两个TCP数据包。

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

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

  • 对于POST,理论上,浏览器先发送HTTP头部header,服务器响应100 continue后浏览器再发送数据部分data,服务器响应200 ok(返回数据)。这个过程看似涉及两个数据包的发送。然而,在实际的网络传输中,是否分为两个数据包取决于多种因素:

    • 首先,一些客户端(如Firefox)可能会优化传输过程,将头部和数据部分合并为一个数据包发送,以减少网络传输的开销。

    • 其次,TCP的拥塞控制、滑动窗口大小以及网络状况等因素也可能影响数据包的划分。如果网络状况良好且数据包大小适中,浏览器和服务器可能会选择合并为一个数据包进行发送。

    • 因此,不能简单地认为POST请求一定会分为两个TCP数据包。实际的数据包划分情况取决于具体的网络环境和客户端、服务器的实现策略。

    • 总的来说,POST请求的数据包划分是一个相对复杂的过程,受到多种因素的影响。在实际应用中,我们应该关注网络传输的效率和稳定性,而不是过分关注是否分为两个数据包。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效,但不能一味将GET替代POST:

  1. GET与POST都有自己的语义,不能随便混用。
  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

其他请求方法

  • GET:获取资源
    GET请求中的数据通常附加在URL的查询字符串中。

  • POST:向指定资源提交数据
    例如提交表单或者上传文件,数据包含在请求体中。

  • PUT:更新资源

  • DELETE:删除资源

  • HEAD:检查资源的存在性,以及获取资源的元信息(如Content-Type、Content-Length等)。
    类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。

  • CONNECT:建立连接隧道,用于代理服务器
    通常用于SSL加密服务器的链接(经由非加密的HTTP代理)。

  • OPTIONS:列出可对资源实行的请求方法,用来跨域请求
    可以用来检查服务器支持的HTTP方法。

  • TRACE:让web服务器端将之前的请求通信环回给客户端
    回显服务器收到的请求,主要用于测试或诊断。

  • PATCH:对资源进行部分修改
    与PUT请求不同,PATCH请求用于更新资源的部分内容,而不是替换整个资源。


POST和PUT请求的区别

PUT请求

  • 通常用于更新或替换服务器上的资源。

  • 使用PUT请求时,客户端需要将整个资源的新版本发送到服务器。
    如果服务器上已存在该资源,则用客户端提交的新版本替换原有的资源。如果该资源不存在,则会创建一个新的资源。

  • PUT请求具有幂等性,即多次发送相同的PUT请求会产生相同的结果。
    这是因为PUT请求用于更新或替换资源,所以无论发送多少次,只要数据相同,结果都是一致的。

POST请求

  • 通常用于创建新的资源或提交数据到服务器进行处理。
    例如,在提交表单、上传文件、提交密码或支付信息时,通常会使用POST请求。

  • POST请求不具备幂等性,即多次发送相同的POST请求可能会导致不同的结果。
    因为每次POST请求都会在服务器上创建新的资源或执行某些操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫老板的豆

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值