计网:GET&POST

159 阅读2分钟

这篇文章主要讲GET请求和POST请求的区别

首先我们从字面上看就很清晰了对吧,一个三个字母一个四个字母(hhhh不对),一个从服务器拿东西,另一个向服务器提交东西对吧。这就是他们最显著的区别,不过面试时当然要答一些有技术的内容对不对?

正文开始: GET和POST都是HTTP协议中的两种请求方法,而http是属于应用层的一个协议,它的底层是tcp和ip协议,所以get和post的底层也是tcpip协议,两者最重要的区别就是:

GET产生一个tcp数据包,而POST产生两个tcp数据包

  • 对于GET请求,浏览器会把header,data一起发送出去,服务器响应200
  • 对于POST请求,浏览器先发header,服务器响应100 continue后,在发送data,服务器相应200

可以这样理解:post请求先去和服务器打声招呼,然后再回头把"货"送给服务器

这样看起来POST请求要比GET请求麻烦一些,有团队提出使用get代替post来优化网站性能 不过,真能这样做吗?

  • 首先get和post都有自己的语义,不能混用
  • 在网络环境好的情况下,发一次包和发两次包时间差基本可以无视,在网络环境差的情况下,两次包发送有助于tcp验证包的完整性
  • 并不是所有浏览器的post请求都发送两次包,firefox只发送一次

还有其他的一些不同:

  • 功能不同:get请求数据,post传送数据
  • 过程不同:get把参数扔进了url里面,你用get请求传的各个参数是可以在浏览器地址栏上看到的;而post请求将其数据放入了Request body中一起传送到了ACTION属性所指的URL地址
  • 传输数据量不同:get传送的数据不超过2KB,post传送数据量较大,默认不受限制
  • 安全性不同:get安全性较低,post安全性较高
  • get请求在浏览器回退是是无害的,而post请求会进行再次提交
  • get请求只支持url编码,post请求支持多种编码格式
  • get请求的参数会被保留在历史记录里面,而post请求不会