GET 与 POST的区别

GET 与 POST的区别

get和post传统意义上区别(一般认为)

  • GET在浏览器回退时是无害的,而POST会再次提交请求

    get请求是向服务器请求一些静态/动态的数据,后退/刷新只是再次请求服务器数据。post属于向服务器提交数据,一次提交一次接受,刷新相当于重写加载post请求,也就是相当于再次想服务器提交数据(可设计为提交后js刷新整个页面来避免这个问题,但是存在另外一个问题是在向服务器提交的过程中再次提交,暂时没能程序处理)

  • GET产生的URL地址可以被Bookmark,而POST不可以

    get产生url地址被书签化保存后下次访问相当于直接访问保存的url,根本原因是url本身就是服务器资源的定位,不具有大变化性,而post是从本地提交给服务器,每次提交数据不一样并且由服务器保存。

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置

    get请求的数据被服务器缓存,因为一个请求可能在短时间内被多次提交,cache了就能有利于下次响应数据的加载,而post一般存储用户提交信息,一般被服务器记录并调用,不会缓存在浏览器。(存在可能的情况:如部分浏览器具有询问你是否本地记住密码)

  • GET请求只能进行url编码,而POST支持多种编码方式
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
  • GET请求在URL中传送的参数是有长度限制的,而POST么有
    业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制

  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

    字面意思,get用来获取,大多数情况谁获取都一样,服务器只在乎你获取的方式正不正确。而post多用于提交,这里面包括了账号密码信息等安全性信息的提交,所以需要做保护。

  • GET参数通过URL传递,POST放在Request body中

实际上,get和post在本质上没有任何区别,只不过是http发送请求的两种方式而已

get和post在发送数据包模式上的区别
get请求一次,发送一个数据包,post请求一次,发送两个数据包
  • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
  • 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
get和post不能混用的原因
1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

猜你喜欢

转载自blog.csdn.net/newbietan/article/details/79886874