1.传递参数 get是通过url传递。 post是放在requestbody中传递。 如下: get请求方式
$.ajax({ type : "get", url : "getUserDetail?id="+id, dataType : "json", success : function(data) {}})post请求方式
$.ajax({ type: 'POST', contentType:"application/json; charset=utf-8", url:"saveKnowLedge", data:JSON.stringify({knTitle:kn_title,knAuthor:kn_author,knImage:kn_image,content:content}), dataType:'json', success:function (data) {}})2.长度限制 get请求在url中传递的参数是有长度限制的。 post请求没有长度限制。
比如:要使用get方式传递富文本框中的内容可能会出现问题,因为富文本框中的内容一般比较多,而且还有可能包含特殊字符和需要转义字符,这个时候就需要使用post请求进行传递参数,直接把参数放在requestbody中,后台接口直接用(@RequestBody 实体类 别名)进行参数注入接收就行了。但是,需要注意的是前端post请求中的参数字段名一定要和实体类中的字段名一致。
(@RequestBody:可以取到json格式的值,适用post请求。request.getParameter(“参数”):只能取到url中的参数值,无法接收json格式的值,适用于get请求) 后台
@ResponseBody @RequestMapping(value="saveKnowLedge") public String saveKnowLedge(@RequestBody KnowLedge kl ,HttpServletRequest request){ String result=""; // KnowLedge kl = new KnowLedge(); // String knTitle=request.getParameter("kn_title"); // String knAuthor=request.getParameter("kn_author"); // String knImage=request.getParameter("kn_image"); // String content=request.getParameter("content"); // // // kl.setKnTitle(knTitle); // kl.setKnAuthor(knAuthor); // kl.setKnImage(knImage); // kl.setContent(content); //调用新增接口 int param=knowledgeService.saveKnowLedge(kl); if(param>0){ result="{\"success\":true,\"msg\":\"保存成功\"}"; }else{ result="{\"success\":true,\"msg\":\"保存失败\"}"; } return result; }前端
$.ajax({ type: 'POST', contentType:"application/json; charset=utf-8", url:"saveKnowLedge", data:JSON.stringify({knTitle:kn_title,knAuthor:kn_author,knImage:kn_image,content:content}), dataType:'json', success:function (data) {}})3.安全性 post比get更加安全,因为get请求参数是直接暴露在url中,所以不能用来传递敏感信息。
4.编码 get请求只能进行url编码。 post请求支持多种编码方式。
5.参数保留 get请求参数会被完整保留在浏览器历史记录里,而post请求参数不会被保留。
6.TCP数据包 get请求产生一个TCP数据包。 post请求产生两个TCP数据包。
get和post本质区别就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们 在应用过程中体现出一些不同。