1:常见回答
1:Get请求 把请求参数放在URL中 Post请求 把请求参数放在请求体(request body)中
2:Get请求 有长度限制 Post请求 没有长度限制
应用层面:
Get请求通常配合表单 如果需要放入JSON 到表单中注意接收方的格式转换
Post请求通常配合表单 或者 JSON(使用@RequestBody)
2:存在问题
问题:
Get请求参数 为什么有长度限制
Get请求参数 能不能放在请求体(request body)中
运输公司:不同的浏览器(发起http请求)+不同的服务器(接受http请求)
假如说运输的时候是一辆车:
Get请求:给车顶堆货物
Post请求:在车内堆货物
理论上你可以在车顶上无限的堆货物(url中无限加参数)。
但是运输公司可不傻,装货和卸货也是有很大成本的,
他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。
业界不成文的规定是:
(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。
超过的部分,恕不处理。
如果你用GET服务,在request body偷偷藏了数据,
不同服务器的处理方式也是不同的,
有些服务器会帮你卸货,读出数据,
有些服务器会直接忽略,所以,也不能保证一定能被接收到。
如何在Get请求里面偷偷塞数据到 request body 中
可以使用curl命令,
事例如下:curl -XGET -H "Content-Type:application/json"
"http://host:port/requestmapping" -d '{"paramId":[1,2,3]}'
3:真正的区别
那么Get请求和Post的真正区别是什么?
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
对于POST方式的请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
的确是可以通过把post请求改为get请求来优化网站性能
网友评论