zoukankan      html  css  js  c++  java
  • Get,Post,@RequestParam,@RequestBody 之间区别联系

    Get ,Post 之间区别:
    get一般用于获取数据 ,反复读取不应该对数据有副作用,即幂等。可以对get请求的数据做缓存。

    post 一般用于提交数据,是不幂等的,无法对post请求做缓存,比如post请求创建书签。

    get请求数据一般放在url 后querystring中,但也可以放在body 中,post 请求数据一般放在body体中,但也可以放在url 后queryString 中。比如ElasticSearch的_search api就用了带body的get;也可以自己开发接口让post一半的参数放在url的querystring里,另外一半放body里;甚至还可以让所有的参数都放Header里,只要请求的客户端和服务器端能够约定好。

    通常get请求数据放在url 中 ,post 请求放在body中,相对来说post比get安全些 。但是从攻击的角度,无论是GET还是POST都不够安全,因为HTTP本身是明文协议。每个HTTP请求和返回的每个byte都会在网络上明文传播,不管是url,header还是body。要保证安全,Htpps 是最基本要求。

    http 协议对get,post请求参数长度都没有限制。只是浏览器会对get请求做限制,避免过长的请求url占用服务资源。

    get请求会产生一次tcp包,post请求会产生两次tcp包。浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok。默认这样请求,因为一般post 请求体比较大,先发送hearder去服务端验证过再传输data,减少资源浪费。

    我们开发中一般按照REST规范:get获取数据,post提交创建资源,put更新数据,delete 删除数据。

    @Requestparam 和@Requestbody 区别:

    @Requestparam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)。RequestParam可以接受简单类型的属性,也可以接受对象类型。实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

    @RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据

    在get请求中,不能使用@RequestBody。 post请求,可以使用@RequestBody和@RequestParam,一个请求中可以存在多个@RequestParam,@RequestBody只有一个。

    开发中一般在get请求中用@RequestParam 接受参数比较少的请求,参数拼接在url中。复杂数据封装为实体类使用post请求放在body体中以json格式发送。

  • 相关阅读:
    PHP浮点数引起的四舍五入问题
    几项有用的JQUERY代码
    php5.5新特性之yield理解
    【转】循环、迭代、遍历和递归
    phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。
    php缩放gif和png格式透明背景变成黑色的解决方法
    javascript统计输入文本的简易方法
    分享几个实用的jquery工具函数
    thinkphp中ajax技术
    正斜杠与反斜杠
  • 原文地址:https://www.cnblogs.com/wlong-blog/p/14941673.html
Copyright © 2011-2022 走看看