首页 > 编程知识 正文

http请求(httppost的使用方法)

时间:2023-05-06 18:06:16 阅读:97676 作者:4513

和getpost是HTTP请求的两种基本方法。如果他们之间有什么不同,参与web开发的人都有自己的看法。

最直观的区别是GET在URL中包含参数,POST通过请求体传递参数。

你可能自己写过无数GET和POST请求,也可能看过很多权威网站总结的它们之间的差异。你已经知道他们应该在什么时候使用它。

面试中被问到这个问题时,你的内心充满了自信和喜悦。你很容易给出一个“标准答案”:

当浏览器回滚时,GET是无害的,POST会再次提交请求。

GET生成的网址可以是Bookmark,但不能是POST。

get生成的网址可以是Bookmark,但是POST不能。

浏览器会主动缓存Get请求,但POST不会,除非手动设置。

Get请求只能通过url编码,而POST支持多种编码方式。

获取请求参数将完全保留在浏览器历史记录中,而POST中的参数将不会保留。

获取请求对URL中传输的参数有长度限制,但POST没有。

对于参数的数据类型,GET只接受ASCII字符,POST没有限制。

Get不如POST安全,因为参数直接暴露在URL上,所以不能用来传输敏感信息。

get参数通过URL传递,POST放在请求正文中。

(这个标准的答案来自w3schools)

“可惜,这不是我们想要的答案!”

请告诉我真相。

如果我告诉你GET和POST本质上是一样的,你相信吗?

让我们脱下GET和POST的神秘外衣,坦诚相见吧!

什么是GET和POST?有两种使用HTTP协议发送请求的方式。

什么是HTTP?HTTP是一种基于TCP/IP的协议,用于在万维网上传递数据。

HTTP的底层是TCP/IP。所以get和post的底层都是TCP/IP,也就是说GET和POST都是TCP链路。Getpost和getpost可以做同样的事情。如果必须在GET中添加请求体,在POST中添加url参数,在技术上是可行的。

那么,为什么“标准答案”会有这么多不同呢?

在万维网的世界里,TCP就像一辆用于各种目的的汽车。我们用TCP传输数据,非常可靠,绝不会出现缺件绑架乘客的现象。但是,如果路上所有的车都只有同样的功能,比如只送外卖的外卖车,那么这个世界看起来就像一团乱麻,需要紧急救治的病人只能使用外卖车,没有救护车;有必要投递紧急快件。如果没有快递车,只能用外卖车,整个交通系统就会瘫痪。你需要紧急治疗。为了防止这种情况发生,流量规则HTTP诞生了。HTTP设置了汽车运输的几个服务类别,包括GET、POST、PUT、DELETE等。按照HTTP,在执行GET请求时,车内要标注GET(设置GET为设置方法),传输的数据要放在车顶(网址)便于记录。如果是POST请求,在车上贴上POST标签,将货物放入车厢。当然,你也可以在GET期间偷偷把一些货物藏在车里,但这是非常可耻的;也可以在开机自检的时候把一些数据放在车顶,会让人觉得很傻。HTTP只是一个行为准则,而TCP是GET和POST的基础。

但是,我们只看到HTTP需要GET和POST参数的传输通道(url或requrest body)。“标准答案”中参数大小的限制从何而来?

在万维网的世界里,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)是不同的运输公司。虽然理论上,你可以在运输车顶上堆叠无限多的货物(在URL中添加无限多的参数)。不过运输公司也不傻,装卸货物的成本比较贵。当然,他们会限制单次发货的数量来控制风险,过多的数据会给浏览器和服务器带来沉重的负担。业内不成文的规则是,(大多数)浏览器通常将网址长度限制在2k字节,而(大多数)服务器处理最大的网址大小。

大为64K,超出部分将不予处理。如果使用GET服务并将数据秘密隐藏在request body中,则不同的服务器将对其进行不同的处理。有些服务器会帮助您卸货然后读取数据,而有些服务器会直接忽略它,因此尽管GET可以带request body,但不能保证一定可以接收到。

好了,现在您知道GET和POST本质上是TCP连接,没有区别。但是,由于HTTP规定和浏览器/服务器限制,它们在应用程序过程中显示出一些差异。

你认为这篇文章结束了吗?

我们的大老板还在等着你玩呢。 。 。

这个老板有多神秘?活泼的过客尝试在Internet上查找“ GET和POST之间的区别”时,这些搜索结果将永远不会提及他。他到底是谁?

GET和POST之间还有另一个主要区别,简单的说:

GET生成一个TCP数据包; POST生成两个TCP数据包。

具体点说:

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

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

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

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。