get&&post
因为get和post都是基于tcp协议实现的,所以其根本没有很大区别。
经典的比喻:
Tcp就像汽车,我们用TCP来运输数据。但是为了突出和区别这些汽车(如送急件的),就有了交通规则http。
HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等。
当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。
如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。
当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据。
** 所以说,HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。**
1.安全性
get用url传输数据,post用body传输数据,所以,我们常常认为get传输是不够安全的。
但其实,http是通过明文传输的,所以如果是对于安全性有较高的要求,最好还是使用https实现端端加密传输。
2.缓存机制
get会被浏览器主动缓存,而post不会,除非手动设置。
原因是post往往是发起请求让服务器做一件事,这件事往往是有副作用的,不幂等的。
所以post请求往往不能随意多次执行,因此不要随意缓存。
幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
3.编码方式
get是querystring(仅支持urlencode编码),而post是放在body(支持多种编码)。
所以其实是 http中url用什么编码 和 body用什么编码。
4.保留历史记录,收藏书签
GET可以,而POST不能
5.长度限制
get最多1024kb(http协议中对url长度无限制,是浏览器以及服务器对它的限制),
post默认为无限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
6.GET在浏览器回退时是无害的,而POST会再次提交请求。
不太正确的一点
Tcp包
GET产生一个TCP数据包;POST产生两个TCP数据包(Firefox只发送一次)。
参考链接:https://zhuanlan.zhihu.com/p/25028045