当前位置: 首页 > 科技观察

很多人误解了HTTP

时间:2023-03-16 21:25:38 科技观察

1中GET和POST的区别。GET和POSTGET和POST是HTTP请求的两种基本方法。二。最直观的区别是GET在URL中包含参数,而POST通过请求体传递参数。你可能自己写过无数GET和POST请求,或者你看过很多权威网站总结的区别,你就知道什么时候用它们。当你在面试中被问到这个问题时,你的内心充满了自信和喜悦。你轻而易举地给出了一个“标准答案”:浏览器回退时GET是无害的,POST会重新提交请求。GET生成的URL地址可以Bookmarked,不能POST。GET请求会被浏览器主动缓存,但是POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会完整保留在浏览器历史记录中,而POST中的参数不会保留。GET请求的URL中传递的参数有长度限制,但是没有POST。对于参数的数据类型,GET只接受ASCII字符,而POST没有限制。GET不如POST安全,因为参数直接暴露在URL上,因此它们不能用于传递敏感信息。GET参数通过URL传递,POST放在Requestbody中。(此标准答案引用自w3schools)“很遗憾,这不是我们想要的答案!”请告诉我真相。..2.这是事实……如果我告诉你GET和POST本质??上没有区别,你信吗?让我们脱下GET和POST的外衣,坦诚相见吧!什么是GET和POST?HTTP协议中发送请求的两种方法。什么是HTTP?HTTP是一种基于TCP/IP的关于如何在万维网上传输数据的协议。HTTP的底层是TCP/IP。所以GET和POST底层也是TCP/IP,也就是说GET/POST都是TCP连接。GET和POST可以做同样的事情。GET需要加一个requestbody,POST需要加一个url参数,技术上是完全可行的。那么,“标准答案”的区别是什么?3.故事开始于200年前。在我的万维网世界中,TCP就像一辆汽车。我们使用TCP来传输数据。非常可靠,绝不会出现漏件、漏件的现象。但是,如果路上到处都是看起来一模一样的汽车,世界就会变得一团糟。一辆传递紧急信息的汽车可能会被前面一辆满载货物的汽车挡住,整个交通系统肯定会瘫痪。为了防止这种情况发生,流量规则HTTP诞生了。HTTP为汽车运输设定了几个服务类别,包括GET、POST、PUT、DELETE等。HTTP规定在执行GET请求时,汽车必须标记为GET(设置方法为GET),并要求把传输的数据在屋顶上(在url中)以便于记录。如果是POST请求,需要在车上贴上POST标签,把货物放到车上。当然你也可以在GET的时候偷偷的在隔间里藏一些货,但是这样很丢人;POST的时候还可以在车顶放一些数据,让人觉得很蠢。HTTP只是一种行为准则,而TCP是GET和POST如何实现的基础。但是,我们只看到HTTP对GET和POST参数的传输通道(url或请求体)的要求。“标准答案”中对参数大小的限制从何而来?4.一家运输公司在我的万维网世界里,还有一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)是不同的发货公司。虽然理论上可以在楼顶无限堆货(在url中添加无限参数)。但是运输公司并不傻。装卸也花费不少。他们会限制单次运输的数量来控制风险。过多的数据对浏览器和服务器都是很大的负担。业界不成文的规则是(大多数)浏览器通常将URL长度限制为2K字节,而(大多数)服务器最多可以处理64K大小的URL。超出部分将不予处理。如果使用GET服务,数据被偷偷隐藏在请求体中,不同的服务器处理方式不同。有的服务器会帮你卸载数据,读取数据,有的服务器直接忽略。因此,GET虽然可以携带请求体,但不能保证被接收到。好了,现在你知道GET和POST本质上都是TCP连接,没有区别。但是,由于HTTP法规和浏览器/服务器的限制,它们在应用过程中表现出一些差异。你以为这篇文章就到这里了吗?5.故事还在继续。我们的大老板还在等着出现呢。..这个boss到底有多神秘?当你试图在网上寻找“GET和POST的区别”时,你会看到的搜索结果中从来没有提到过他。他是什么。..GET和POST之间还有另一个主要区别。简单的说:GET产生一个TCP数据包;POST生成两个TCP数据包。长话短说:对于GET请求,浏览器会把http头和数据一起发送,服务器会回应200(返回数据);对于POST,浏览器先发送header,服务器响应100continue,浏览器发送数据,服务器响应200ok(返回数据)。换句话说,GET只需要一辆车来运送货物,而POST则要走两趟。第一趟,去服务器打个招呼,“嘿嘿,待会儿我要发一批货,你打开吧。”门口接我”,然后转身送货。由于POST需要两步,耗时稍多,GET似乎比POST效率更高。因此,雅虎团队建议将POST替换为GET进行优化网站性能。但这是一个坑!慎入。为什么?1.GET和POST有自己的语义,不能随便混用。2.据研究,当网络环境好的时候,时间差到发送一个数据包,发送两个数据包的时间基本可以忽略不计。在网络环境较差的情况下,发送两个数据包的TCP在验证数据包的完整性上有很大的优势。3.并不是所有的浏览器都会发送数据包两次POST,Firefox只会发送一次现在,当面试官问你“GET和POST的区别”时,你的心是这样的吗?