美文网首页学习准备
HTTP请求GET和POST的区别

HTTP请求GET和POST的区别

作者: 九遐 | 来源:发表于2018-09-07 10:53 被阅读146次
    image.png

    GET和POST的区别可以归结为两方面,一方面是规范(specification)的区别,另一方面是用法和实现(implementation)上的区别

    规范上的区别

    HTTP有关GET和POST的请求规范定义在RFC7231

    • GET的语义是请求获取指定的资源;POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同,比如提交表单。
    • GET方法是安全、幂等、可缓存的(除非有 Cache-ControlHeader的约束);POST不安全,不幂等,(大部分实现)不可缓存。
    • GET方法的报文主体没有任何语义;POST的报文大部分都具有特定语义。

    实现上或者用法上的区别

    • 请求方式
      • GET请求的时候可以有参数也可以无参数;参数可以放在path里也可以放在header里
      • POST请求的报文一般放在BODY里面,有时候需要设置header
    • 提交的数据长度
      • GET从理论上或者规范上对数据长度没有限制,但浏览器和操作系统会对这个长度有限制。比如IE对URL长度的限制是2083字节
      • POST也没有大小限制的,HTTP协议规范也没有进行大小限制。但服务器一般对长度都有限制,比如微软的 IIS 6.0默认ASP POST数据量最大为200KB,每个表单域限制是100KB
    • 网络安全
      • GET因为有缓存和明文传输,安全性相对较弱。使用GET提交敏感数据还可能会造成Cross-site request forgery攻击
      • POST 安全性相对较高
    • 数据包个数
      • GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
      • POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。但是,从客户端的角度来看:并不是所有的Server都会正确实现100-continue协议,如果Client发送 头{"Expect":"100-continue"}消息后,在timeout时间内无响应,Client需要立马上传POST数据;有些Server会错误实现100-continue协议,在不需要此协议时返回100,此时客户端应该忽略。从服务器的角度来看:正常情况下,收到请求后,返回100或错误码;如果在发送100-continue前收到了POST数据(客户端提前发送POST数据),则不发送100响应码(略去)。具体可以参考 https://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3
      • 请注意:对于SOA架构的后台RESTful接口,GET和POST都是请求一次,很少见到请求两次的POST。
    • 其他区别
      • GET在浏览器回退时是无害的,而POST会再次提交请求。
      • GET产生的URL地址可以被Bookmark,而POST不可以。
      • GET请求只能进行url编码,而POST支持多种编码方式。
      • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
      • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

    相关文章

      网友评论

        本文标题:HTTP请求GET和POST的区别

        本文链接:https://www.haomeiwen.com/subject/zbsxgftx.html