Get和post的区别

  • GET在浏览器回退时是无害的,而POST会再次提交请求;
  • GET产生的URL地址可以被bookmark,而POST不可以;
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置;
  • GET请求只能通过URL编码,而POST支持多种编码方式;
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留;
  • 对于参数的数据类型,GET只接受ASCII字符,而POST没有限制;
  • GET参数通过URL传递,POST放在Request body中;
  • 采用GET方法向服务器上传数据时,一般将数据添加到URL后面,并且二者用 “ ?”连接,各个变量之间用 “ & ”连接。由于对URL的长度存在限制,因此采用这种方法能上传的数据量非常小,通常在1024左右
  • 采用POST方法传递数据时通过HTTP请求的附件进行的,传送的数据量更大一些,一般默认为不受限制的
  • GET方法上传的数据是添加在URL中,因此上传的数据被彻底 “ 暴露 ”出来
    ,本身存在安全隐患,尤其是当用户需要向服务器提交一些敏感信息时
  • POST方法向服务器提交的内容在URL中并没有明文显示,对用户都是不可见的,所以安全性更好一些
  • 在传输过程中,GET 产生一个TCP数据包;POST 产生两个TCP数据包。
    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。
  • 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。(不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次)

总结:GET主要用来获取服务端资源信息,类似于查询;POST能够从服务端获取资源外,同时向服务端上传数据。