GET请求和POST请求的区别

GET请求和POST请求的区别:

  GET POST
后退/刷新 请求是无害的 会重新请求一次
传参 参数是连接在url后面的 参数是存放在请求体内的
参数长度

浏览器对url长度有限制 (不同浏览器长度限制不一样),对传参数量有限制,一般限制在 2~8K 之间

事实上get请求也能在requestbody内携带参数,只不过不符合规定,有的浏览器能够获取到数据,而有的不能。

参数存放在requestbody内所以参数数量没有限制
安全性 get请求参数暴露在 url 上,所以安全性比post差 安全性比 get 好。但从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输,只要在网络节点上抓包,就能完整地获取数据报文。
要想安全传输,就只有加密,也就是 HTTPS
数据类型的限制 只允许 ASCII 字符,只能进行 url 编码 无限制,允许二进制数据,支持多种编码方式
浏览历史 参数保存在历史中,可被收藏为书签,因为参数就在 url 中 参数不能保存在历史中,不可被收藏为书签

 

实际上GET和POST本质上没有区别你信吗?

GET 和 POST 都是HTTP协议中的两种发送请求的方法。HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议,HTTP的底层是TCP/IP。

所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP连接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

GET和POST本质上就是TCP连接,并无差别。但是由于 HTTP的规定 和 浏览器/服务器的限制 ,导致他们在应用过程中体现出一些不同。

GET和POST还有一个重大区别:GET产生一个TCP数据包,POST产生两个TCP数据包。

  • 对于GET方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应200(返回数据);
  • 而对于POST,浏览器先发送 header,服务器响应100 continue,浏览器再发送 data,服务器响应200 ok(返回数据)。

所以貌似 GET请求比 POST 请求的速度更快一点,看起来GET比POST更有效。因此有团队推荐用GET替换POST来优化网站性能。但是不要这么做:

  • GET与POST都有自己的语义,不能随便混用。
  • 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
  • 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

 

 

posted @ 2022-09-27 11:29  Lamb~  阅读(342)  评论(0编辑  收藏  举报