基础理论-GET与POST的区别
这是我参与更文挑战的第1天,活动详情查看: 更文挑战
当被问两者之间的区别时,我们要先考虑是基于什么前提?
- 如果什么前提都没有,不使用任何规范,只考虑语法和理论上的HTTP协议。
那么GET和POST几乎没有什么区别,只有名字上不一样。 - 如果是基于RFC规范的。
- 理论上的(Specification):GET和POST具有相同语法的,但是有不同的语义。GET是用来获取数据的,POST是用来发送数据的,其他方面没有区别。
- 实现上的(Implementation):各种浏览器,就是这个规范实现者。基于这种实现上的,也就是基于各种浏览器的,才有我们所说的常见的那些不同。
常见的那些不同:- GET的数据在URL里是可见的。POST请求不显示URL。
- GET对长度是有限制的,POST长度是无限的。
- GET请求的数据可以收藏为书签,POST请求到的数据不可收藏为书签
- GET编码类型:application/x-www-form-url。POST的编码类型有很多种,常见的有:encodeapplication/x-www-form-urlencoded
multipart/form-data - GET请求后,按后退按钮、刷新按钮无影响,POST数据会重新提交。
- GET历史参数会被保留在浏览器里,POST不会保存在浏览器中的。
- GET只允许ASCII编码。POST没有编码限制,允许发二进制,所以POST能发文件。
- GET与POST相比,GET的安全性较差。因为GET所发的数据是URL的一部分。如果发送的是密码的话,密码会在url中给显示出来了,而且会保存在浏览器里面,这样会比较容易泄露,如果用POST发送的话,会相对于GET好一点,起码不会在浏览器保存,但是它在网络中也是明文的,所以如果想要发送密码的话尽量使用HTTPS协议。