语义区别

  • GET请求用于获取数据
  • POST请求用于提交数据

缓存

  • GET请求能被缓存,以相同的URL再去GET请求会返回304
  • POST请求不能缓存

数据长度

HTTP协议从未规定过GET/POST请求长度是多少,所谓的请求长度限制由浏览器和Web服务器决定的,各种浏览器和 web 服务器的设定均不一样,这依赖于各个浏览器厂家的规定或者可以根据 web 服务器的处理能力来设定。传统IE中URL的最大可用长度为2048字符,其他浏览器对URL长度限制实现上有所不同,POST请求无长度限制(目前理论上是这样的)。

数据包

多数浏览器对于POST采用两阶段发送数据的,先发送请求头,再发送请求体,即使参数再少再短,也会被分成两个步骤来发送(相对于GET),也就是第一步发送header数据,第二步再发送body部分。HTTP是应用层的协议,而在传输层有些情况TCP会出现两次连接的过程,HTTP协议本身不保存状态信息,一次请求一次响应。对于TCP而言,通信次数越多反而靠性越低,能在一次连结中传输完需要的消息是最可靠的,尽量使用GET请求来减少网络耗时。如果通信时间增加,这段时间客户端与服务器端一直保持连接状态,在服务器侧负载可能会增加,可靠性会下降。

安全

这里的「安全」和通常理解的「安全」意义不同,如果一个方法的语义在本质上是「只读」的,那么这个方法就是安全的。客户端向服务端的资源发起的请求如果使用了是安全的方法,就不应该引起服务端任何的状态变化,因此也是无害的。 此RFC定义,GET, HEAD, OPTIONS 和 TRACE 这几个方法是安全的。
但是这个定义只是规范,并不能保证方法的实现也是安全的。

幂等

幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同。按照RFC规范,PUT,DELETE和安全方法都是幂等的。同样,这也仅仅是规范,服务端实现是否幂等是无法确保的。引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前失去连接,如果方法是幂等的,就可以放心地重发一次请求。这也是浏览器在后退/刷新时遇到POST会给用户提示的原因:POST语义不是幂等的,重复请求可能会带来意想不到的后果。

参考

http://blogread.cn/it/article/6100?f=wb
https://www.zhihu.com/question/28586791

最新文章

  1. Linux系统中Xampp+Bugfree安装
  2. [bzoj2243][SDOI2011]染色
  3. How to remove replication in SyteLine V2
  4. Centos 源配置 163,epel,mysql
  5. java中判断字符串是否为数字的三种方法
  6. 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 2(Big Number)
  7. VS2012简单的使用感受+插件推荐
  8. ActiveXObject对象详解
  9. mysql 查询重复值命令
  10. js数值转换
  11. [Python]Unicode转ascii码的一个好方法
  12. 每天一个Linux命令(11)--nl命令
  13. TypeScript入门-函数
  14. Android Studio C/C++开发环境配置
  15. java实现循环链表的增删功能
  16. 【洛谷P1659】啦啦队排练
  17. linux系统无法启动或无法登入
  18. lr分布式测试--笔记
  19. java41 类的高级概念
  20. python删除数组元素导致跳过元素

热门文章

  1. Linux 命令详解(十一)Shell 解析 json命令jq详解
  2. SQL Server进阶(二)字段类型
  3. shell反弹总结
  4. ms sqlserver2008r2 自动备份
  5. 如何手动删除服务?Windows手动删除服务列表中残留服务的方法
  6. ProcessHacker可编译版本
  7. [转] bss段、data段、text段
  8. oracle的读写分离实现
  9. expdp和impdp导入和导出数据
  10. 生成ansible-playbook的yaml文件的代码(字典排序问题无法解决)