颠覆你的认知?get和post请求的本质

      最后更新:2022-07-05 23:37:09 手机定位技术交流文章

      GET和 POST是HTTP请求的两个基本方法,说他们之间的区别,也许我们从中得到的是:GET包含URL中的参数, POST通过请求体传递参数。

      正式的标准答案如下:

      • 当浏览器返回时,GET是无害的, POST将再次提交请求。
      • GET生成的URL地址可以被标记,但不能 POST。
      • GET请求将由浏览器缓存, POST则不会,除非手动设置。
      • GET请求只能由url编码, POST则支持多个编码方法。
      • GET请求参数完全存储在浏览器历史记录中, POST参数则不存储。
      • GET请求在URL中传输的参数是有限的长度, POST不是。
      • 对于参数数据类型,GET只接受 ASCII字符,而 POST没有限制。
      • GET比 POST更不安全,因为参数直接暴露于URL,不能用于传输敏感信息。
      • GET参数通过URL传递, POST在请求体中放置。

      当然,在面试中回答这些问题也是好的。你认为我们会给你面试的答案吗?

      如果我告诉你,GET和 POST不是与你所信的本质不同,怎么办?

      首先我们需要理解什么是GET和 POST?
      在HTTP协议中发送请求有两种方式。

      什么是HTTP?HTTP是一个基于TCP/IP的协议,描述数据如何在多维网络中通信。

      HTTP的底层是TCP/IP。因此GET和 POST的下层也是TCP/IP,也就是说,GET/POST是所有TCP链接。GET和 POST是同样的事情。你将添加请求机构来获取,发送url参数,技术上是完美的。

      那么问题是,上面所有的标准答案是什么?

      TCP就像汽车,我们使用TCP来传输数据,它很可靠,没有几个缺货的现象。但是如果路上的车子都一样,那世界看起来很混乱,一辆载有货物的卡车在路上可能堵塞一辆救护车.整个运输系统将瘫痪。

      为了避免这种情况,HTTP的交通规则诞生了。HTTP已经为汽车运输设置了几个服务类别,有GET, POST, PUT, DELETE等.HTTP规定,执行GET请求时,将车标记为GET(设置方法为GET),它还要求传输的数据放在汽车的顶部(在url)以便方便的记录。如果 POST请求,你必须把邮寄标签放在车上,把货物放在车厢里.

      当然,当你收到货时,你可以在车里隐藏一些货物,但这并不十分华丽;当你发送它时,你也可以把一些数据放在车顶上,这让你看起来很傻。

      我们只看到传输通道(url或requrest体)的GET和 POST参数的HTTP请求。标准答案中,参数大小的限制是从哪里来的?

      在这里插入图片描述

      在我的世界大网中,还有另一个重要角色:运输公司。 不同的浏览器(启动http请求)和服务器(接收http请求)是不同的运输公司。

      但运输公司并不愚蠢,船运和卸货也是非常昂贵的,他们将限制单一运输量以控制风险,太多的数据对浏览器和服务器都是沉重的负担。行业 的 非 书面 规定 是 :大多数浏览器通常限制url的长度为2K字节,大多数服务器处理最大64K的url。超过的部分,恕不处理。

      如果你使用GET服务,在请求体中隐藏数据,不同的服务器也有不同的处理方法,有些服务器会帮助您卸载货物,读出数据,有些服务器直接忽略它,所以,虽然GET可以携带请求机构,我不能保证会接受。

      好吧,现在你知道,GET和 POST基本上是TCP链接,没有区别。 不过,由于HTTP规则和浏览器/服务器的限制,一些区别反映在他们的应用程序中。

      GET 和 POST 之间也有很大区别,简单地说:

      GET生成一个TCP包; POST生成两个TCP包

      • 在GET模式中,浏览器将http头条和数据一起发送,服务器则响应200(返回数据);
      • 对于 POST,浏览器首先发送标题,服务器响应100继续,浏览器再次发送数据,服务器响应200OK(返回数据)。

      换句话说,GET只得开车一次才能交货,而Post则必须两次,第一次,向服务器问好:"你好,我等着交货,你开门欢迎我,"然后转身交货。

      因为 POST 需要两个步骤,需要更多的时间,所以GET 似乎比 POST 更有效。 因此,雅虎团队建议使用GET 而不是 POST 来优化网站的性能。
      1.GET和 POST都有各自的语义,不能混淆。

      2.根据研究,在良好的网络环境下,一个数据包的时间和两个数据包的时间之间的差异是可以忽略的。 在较差的网络环境下,有两个数据包的TCP在验证数据包完整性方面具有很大的优势。

      3.并非所有的浏览器都发送两个包,而Firefox只发送一个包。

      现在你转过身去看看上面的标准答案,你有更深层次的洞察力吗!

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/29382.html

          热门文章

          文章分类