POST和GET请求区别

1. 请求长度的限制

        在HTTP协议中,从未规定GET/POST的请求长度限制,对于GET,对url的限制来源于浏览器或web服务器,浏览器和服务器限制了url的长度。因此,在使用GET请求时,传输数据会受到URL长度的限制。对于POST,由于没有url传值,理论上是不会受到限制的,但是实际上各个服务器会对POST提交的数据大小进行限制,Apache、IIS都有各自的配置。如果支持IE,则最大长度为2083byte,若只支持Chrome,则最大长度 8182byte。

2. 安全性的区别

        POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不会修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露在url上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。而对于POST方式,数据通过Request Body传递,除此之外,GET请求提交的数据还可能会造成CSRF攻击。

3. 缓存方面的区别

        GET请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存。POST不同,POST做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存。因此GET请求适合于请求缓存。

4. 获取数据的区别

        GET是从服务器上获取数据,POST是向服务器传送数据。对于GET方式,服务器用Request.QueryString获取变量的值,对于POST方式,服务器用Request.Form获取提交的数据。

       以下是搜集的GET与POST的主要区别:

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST么有(原因是浏览器和服务器的限制)。
  • GET产生一个TCP数据包;POST产生两个TCP数据包(Firefox除外)。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。

猜你喜欢

转载自www.cnblogs.com/princess-knight/p/9293332.html