GET的URL会有长度上的限制(组图)

首先是“GET提交的数据有长度限制”。如果我们使用 GET 通过 URL 提交数据,那么 GET 可以提交的数据量与 URL 的长度直接相关。实际上,URL 没有参数的上限,HTTP 协议规范也没有限制 URL 的长度。此限制是对它的特定浏览器和服务器限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,具体取决于操作系统的支持) .

请注意,此限制是整个 URL 长度,而不仅仅是您的参数值数据长度。

POST 也是如此。POST 没有大小限制,HTTP 协议规范也没有限制 POST 数据的大小。限制是服务器处理程序的处理能力。

当然,我们常说GET的URL会有长度限制。怎么了?虽然这不是 GET 和 POST 的本质区别,但我们也可以谈谈 URL 长度限制的两个原因:

1. 浏览器。早期的浏览器限制了 URL 的长度。而现在具体的限制是什么?我自己没有测试过,所以就不复制网上的说法了。

2. 服务器。URL较长,对服务器处理也是一种负担。最初,一个会话中没有太多数据。现在,如果有人恶意构建了几个 M 大小的 URL 并继续访问您的服务器。服务器的最大并发显然会下降。另一种攻击方法是告诉服务器Content-Length是一个很大的数字,然后只向服务器发送少量数据,服务器就会等待。即使您有超时设置,这种故意的超时超时也会使服务器不被注意。有鉴于此,大多数服务器出于安全和稳定的原因会限制 URL 长度。但是这个限制是针对所有 HTTP 请求的,与 GET 和 POST 无关。

3. POST 比 GET 更安全,因为数据在地址栏上不可见

这个说法其实是基于上面的第1点和第2点,我觉得没有问题,但是我需要明白为什么在地址栏上使用GET不安全,以及是否还有其他原因“POST比GET更安全” ”。

通过 GET 提交数据,用户名和密码会以明文形式出现在 URL 上,因为登录页面可能被浏览器缓存,其他人可以查看浏览器的历史,那么其他人就可以获取到您的帐号和密码,除了另外,使用 GET 提交数据也可能导致跨站请求伪造攻击。

三、我的理解

“1. GET 使用 URL 或 Cookie 传递参数post有大小限制吗,而 POST 将数据放在 BODY 中”,这是由于 HTTP 协议使用约定所致。不是他们自己的区别。

“2. GET方式提交的数据有长度限制,POST数据可以很大。” 这是由于他们使用的操作系统和浏览器设置之间的差异。GET 和 POST 本身也没有区别。

“3. POST 比 GET 更安全,因为数据在地址栏上不可见”,这句话没问题post有大小限制吗,但仍然不是 GET 和 POST 本身的区别。

虽然这三点不是自己的区别,但至少是使用上的区别,所以我面试这个问题的时候,如果被面试者能回答以上三点,我基本会给及格分。那么你想要更高的分数吗?

四、终极差异

GET 和 POST 最大的区别在于 GET 请求是幂等的,而 POST 请求不是。这是它们的本质区别,以上只是使用上的区别。

什么是幂等性?幂等性意味着对资源的一次和多次请求应该具有相同的副作用。简单来说,这意味着对同一个 URL 的多个请求应该返回相同的结果。对于幂等性,请参阅我评论中推荐的文章。

由于它们的不同,您不应该也不能使用 get 请求来添加、删除或修改数据,这会产生副作用。因为 get 请求是幂等的,所以会在网络较差的隧道中进行重试尝试。如果使用get请求添加数据,存在重复操作的风险,而且这种重复可能会产生副作用(浏览器和操作系统都不知道你会使用get请求进行添加操作)。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论