GET和POST两种根本申请办法有什么区别

GET和POST是HTTP申请的两种根本办法,要说它们的区别,接触过WEB开发的人都能说出一二。

最直观的区别就是GET把参数蕴含在URL中,POST通过request body传递参数。

你可能本人写过无数个GET和POST申请,或者曾经看过很多权威网站总结出的他们的区别,你十分分明晓得什么时候该用什么。

当你在面试中被问到这个问题,你的心田充斥了自信和喜悦。

你轻轻松松的给出了一个“标准答案”:

  • GET在浏览器回退时是有害的,而POST会再次提交申请。
  • GET产生的URL地址能够被Bookmark,而POST不能够。
  • GET申请会被浏览器被动cache,而POST不会,除非手动设置。
  • GET申请只能进行url编码,而POST反对多种编码方式。
  • GET申请参数会被残缺保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET申请在URL中传送的参数是有长度限度的,而POST么有。
  • 对参数的数据类型,GET只承受ASCII字符,而POST没有限度。
  • GET比POST更不平安,因为参数间接裸露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。

(本标准答案参考自w3schools)

“很遗憾,这不是咱们要的答复!”

请通知我假相...

如果我通知你GET和POST实质上没有区别你信吗?

让咱们扒下GET和POST的外衣,坦诚相见吧!

GET和POST是什么?HTTP协定中的两种发送申请的办法。

HTTP是什么?HTTP是基于TCP/IP的对于数据如何在万维网中如何通信的协定。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事件是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是齐全行的通的。

那么,“标准答案”里的那些区别是怎么回事?

在我大万维网世界中,TCP就像汽车,咱们用TCP来运输数据,它很牢靠,从来不会产生丢件少件的景象。

然而如果路上跑的全是看起来截然不同的汽车,那这个世界看起来是一团凌乱,送急件的汽车可能被后面满载货物的汽车拦堵在路上,整个交通系统肯定会瘫痪。为了防止这种状况产生,交通规则HTTP诞生了。

HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET申请的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以不便记录。

如果是POST申请,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也能够在GET的时候往车厢内偷偷藏点货物,然而这是很不荣耀;也能够在POST的时候在车顶上也放一些数据,让人感觉傻乎乎的。

HTTP只是个行为准则,而TCP才是GET和POST怎么实现的根本。

然而,咱们只看到HTTP对GET和POST参数的传送渠道(url还是requrest body)提出了要求。“标准答案”里对于参数大小的限度又是从哪来的呢?

在我大万维网世界中,还有另一个重要的角色:运输公司。

不同的浏览器(发动http申请)和服务器(承受http申请)就是不同的运输公司。尽管实践上,你能够在车顶上有限的堆货物(url中有限加参数)。

然而运输公司可不傻,装货和卸货也是有很大老本的,他们会限度单次运输量来管制危险,数据量太大对浏览器和服务器都是很大累赘。业

界不成文的规定是,(大多数)浏览器通常都会限度url长度在2K个字节,而(大多数)服务器最多解决64K大小的url。超过的局部,恕不解决。

如果你用GET服务,在request body偷偷藏了数据,不同服务器的解决形式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器间接疏忽,所以,尽管GET能够带request body,也不能保障肯定能被接管到哦。

好了,当初你晓得,GET和POST实质上就是TCP链接,并无差别。然而因为HTTP的规定和浏览器/服务器的限度,导致他们在利用过程中体现出一些不同。

你认为本文就这么完结了?

咱们的大BOSS还等着出场呢...

这位BOSS有多神秘?当你试图在网上找“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就只发送一次。

当初,当面试官再问你“GET与POST的区别”的时候,你的心田是不是这样的?

END

转发自Java干货微信公众号