开发中共事问了我一个问题
Q: GET申请能不能用request body来传递数据?
这个问题的场景是,他们的前后端沟通须要携带简单的参数,用POST办法的request body(key value)的模式传参会更加明了,但又感觉不够语义化,所以想到了GET + request body。

A: HTTP标准rfc2616中是没有对GET办法的应用body做限度( HTTP 标准并未规定GET不能发送 request body ),但发送申请的载体(如浏览器、postman)会对GET申请的request body做出限度,chrome会间接把GET申请中的request body置空,Postman,在抉择 GET 时 Body 标签是灰色不可用的。

在新的标准rfc7231中,明确阐明了在GET申请上发送request body可能会导致某些现有实现回绝该申请。

"A payload within a GET request message has no defined semantics;
sending a payload body on a GET request might cause some existing
implementations to reject the request."

rfc2616
https://www.w3.org/Protocols/... 9.3 GET
rfc7231
https://datatracker.ietf.org/...
Q: GET发申请时URL的长度有限度吗?

A: HTTP协定未对URL长度做限度,但发送申请的载体(如浏览器)会对URL的长度做出限度。不同浏览器的长度限度可能存在不同。Chrome将IPC反序列化的url长度限度为2MB。(Chrome is restricting the length of URLs that can be deserialized from IPC to 2MB --出自chromium论坛,2011年, https://bugs.chromium.org/p/c...)
(只记住2MB这个论断。留神2MB不是2048个字符,也不是2000个字符,2MB 相当于 2097152 个字符,这与另一个被广为流传的答案-字符长度2000 个字符齐全不同,2000字符这个答案的最早出处我无从讲究
https://www.geeksforgeeks.org...)

Q: GET申请和POST申请还有哪些不同?
A: GET和POST实质上都是TCP链接。然而因为HTTP的规定和浏览器/服务器的限度,导致他们在实现上有区别。
对于GET申请,浏览器会把request header和data一并发送进来,胜利状态,服务器响应200,返回数据。(只需一次发包)
而对于POST申请,浏览器先发送header,服务器响应100 continue,浏览器再发送data,胜利状态,服务器响应200 ,返回数据。(两次发包)

看上去POST须要发包两次,工夫耗费更多一点。但在网络环境好的状况下,发一次包的工夫和发两次包的工夫差异根本能够忽视。而在网络环境差的状况下,两次包的TCP在验证数据包完整性上,有十分大的劣势。

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

同步更新到本人的语雀
https://www.yuque.com/diracke...