浅谈 HTTP中Get与Post的区别

存在的误区

有人说 HTTP 协议下的 Get 请求参数长度是有大小限制的,最大不能超过XX,而 Post 是无限制的,看到这里,我想他们定是看多了一些以讹传讹的博客或者书籍,导致一种理解上的误区:

1.HTTP 协议从未规定 GET/POST 的请求长度限制是多少。
2.所谓的请求长度限制是由浏览器和 web 服务器决定和设置的,各种浏览器和 web 服务器的设定均不一样,这依赖于各个浏览器厂家的规定或者可以根据 web 服务器的处理能力来设定。
1.get

HTTP协议规范没有对URL长度进行限制,但是一般浏览器会限制

如:IE对URL长度的限制是2083字节(2K+35)。

首先是"GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系 了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
注意这是限制是整个URL长度,而不仅仅是你的参数值数据长度。
【get方式提交数据的大小,http协议并没有硬性限制;而是与浏览器及服务器、操作系统有关。使用get方式,url最长可达8167b】
2.post
理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。
如:在Tomcat下取消POST大小的限制(Tomcat默认2M);
3.GET和POST还有一个重大区别:
简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?
1. GET与POST都有自己的语义,不能随便混用。
2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

最新文章

  1. 利用JS生成01010101……长度可控的序列
  2. Mybatis 批量更新 ORA-00911: 无效字符的错误
  3. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
  4. ambari之hbase数据迁移
  5. reverse-daily(1)-audio_visual_receiver_code
  6. 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
  7. [转载]我们可以用SharePoint做什么
  8. WPF开发时光之痕日记本(一)——富文本编辑器
  9. JSP基本面试的试题
  10. (转)c# math 计算两点之间的角度公式
  11. Photoshop支持ico输出
  12. xml使用系统整理
  13. win7搭建php7+apache2.4
  14. Android笔记: 在Eclipse环境下使用Genymotion模拟器
  15. OneZero第三次站立会议(2016.3.23)
  16. UVa210 Concurrency Simulator (ACM/ICPC World Finals 1991) 双端队列
  17. bash deploy.sh 通过bash命令 执行scp -r 命令将本地文件拷贝到服务器
  18. mysql数据库表的查询操作-总结
  19. 安全关闭MySQL
  20. underscore arrays

热门文章

  1. webstrom IDE 正则替换
  2. Proxmox如何进入单人维护模式(重置root密码)
  3. leetcode简单题6
  4. idea运行时默认显示的index.jsp修改方法
  5. 在MySql中如何定义像Java中类型的Boolean类型
  6. 吴裕雄--天生自然 PHP开发学习:PhpStorm的配置与安装
  7. 混乱中的ICO平台,会不会是下一个P2P的重灾区?
  8. nexus7入手
  9. python爬虫之浅析验证码
  10. LeetCode 题解 | 面试题 10.01. 合并排序的数组