get和post
get传递的参数有长度限制,post理论上是没有限制;
get相对于post更加不安全,因为参数直接暴露在url上;
get可能会产生缓存(每次请求url的后面加一个时间戳或者是随机数就可以没有缓存),post不会;
get在浏览器回退的时候是无害的,post会再次提交请求;
(因为get是幂等的所以无论执行多少遍都不会影响最终的储存结果,而post每次调用都会创建新的资源)
装逼时间到~~~
其实get和post本质上没有区别,都是http协议的一种请求方式。
http是基于TCP/IP关于数据如何在万维网中通信的一种协议。
打个比方说,TCP就是一辆货车,用它传输数据不会发生丢失的情况。可如果到处都是一模一样的货车就会很混乱,于是负责交通的HTTP就出现了,它规定当发送GET请求的时候给货车打上GET的喷漆(也就是method是get),他要求get请求的时候要把货物放在货箱外(也就是RUL);发送POST请求的时候给货车打上POST的喷漆,要求把货物放在货箱中。
POST和GET还有一个重大区别!!!
简单说就是get会产生一个TCP数据包,post会产生两个TCP数据包。
就是get请求浏览器会把http header和data一起发送出去;post请求浏览器会先把header发送过去再发送data。
也就是说,GET只需要货车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。
1. GET与POST都有自己的语义,不能随便混用。
2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。