的同事问我一个问题Q:GET请求可以使用请求体来传递数据吗?这个问题的场景是他们的前后端通信需要携带复杂的参数。以POST方式的requestbody(keyvalue)的形式传递参数会更加清晰,但是不够语义化,所以想到了GET+requestbody。A:在HTTP规范rfc2616中,对GET方法的body没有限制(HTTP规范没有规定GET不能发送请求体),但是发送请求的载体(比如浏览器,postman)将向GET请求的请求体发出请求。限制,chrome会直接清空GET请求中的请求body,Postman,选择GET时,Body标签是灰色不可用的。在新规范rfc7231中明确指出,在GET请求上发送请求体可能会导致一些现有的实现拒绝该请求。“GET请求消息中的有效负载没有定义的语义;在GET请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。”rfc2616https://www.w3.org/Protocols/...9.3GETrfc7231https://datatracker.ietf.org/...问:GET发送请求时,是否有URL长度限制?A:HTTP协议不限制URL的长度,但发送请求的载体(如浏览器)会限制URL的长度。不同的浏览器可能有不同的长度限制。Chrome将IPC反序列化的url长度限制为2MB。(Chrome将可从IPC反序列化的URL的长度限制为2MB——来自chromium论坛,2011,https://bugs.chromium.org/p/c...)(记住2MB的结论。请注意,2MB不是2048个字符,也不是2000个字符。2MB相当于2097152个字符。这与另一个广为流传的答案完全不同——字符长度为2000个字符。2000字答案的最早出处我无从考证https://www.geeksforgeeks.org...)问:GET请求和POST请求有什么区别?A:GET和POST本质??上都是TCP连接。但是,由于HTTP法规和浏览器/服务器的限制,它们的实现存在差异。对于GET请求,浏览器会将请求头和数据一起发送。在成功状态下,服务器响应200并返回数据。(只发送一次包)对于POST请求,浏览器先发送header,服务器响应100continue,然后浏览器发送数据。如果状态为成功,则服务器响应200并返回数据。(发送两次包)POST好像需要发送两次包,比较耗时间。但是在网络环境好的情况下,发送一个数据包和发送两个数据包的时间差异基本可以忽略不计。在网络环境较差的情况下,有两个数据包的TCP在验证数据包的完整性方面有很大的优势。注意:并非所有浏览器都在POST中发送包两次,Firefox只发送一次。同步更新到你的语雀https://www.yuque.com/diracke...
