在开发前端请求后端的机制时,遇到了携带多个查询参数时URL长度的问题。 URL 有长度限制吗?如果是的话,极限到底是多少?此外,单个请求中可以发送的查询参数是否有最大数量?我正在寻找解决这些问题的相关标准或文档,并且也希望了解浏览器和服务器施加的不同限制。
我尝试过的:
查看浏览器文档:我检查了 Chrome 和 Firefox 等浏览器的文档,发现大多数现代浏览器支持最多大约 2000 个字符的 URL。然而,我找不到一个明确的标准。 检查服务器文档:我查看了 Apache 和 IIS 等服务器的官方文档。 Apache 的默认 URL 长度限制为 8192 个字符 (8KB),IIS 的默认限制为 16384 个字符 (16KB)。尽管如此,我仍然需要确定最佳实践。 实际测试:我在实际项目中进行了一些测试,发现很长的URL会导致请求失败,但具体原因和标准尚不清楚。
我在寻找什么:
我希望得到以下问题的明确答案:
URL 长度限制是多少?不同的浏览器和服务器是否有特定的限制? 单个请求中最多可以发送多少个查询参数? 有相关标准或参考文件可以参考吗?
我今天对各种浏览器做了一些测试,发现现代浏览器至少支持 65,536 个字符的 URI 长度。我测试了一个 65,508 字节的
GET
变量 (https://www.example.com/?test=[laksdjfklasjdfklajf...]
) 并回显了 Django 的 runserver
的长度,以查看以下每个浏览器组合是否支持完整长度(在 Django 中,print(len(request.GET.get("test", "")))
)。
正如您所注意到的,您的网络服务器可能必须配置为支持此长度。您可以在 Apache 的配置中通过将指令更改为
LimitRequestLine 65546
来完成此操作。
BRAVE ON WINDOWS: 65508 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36
EDGE ON WINDOWS: 65508 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
FIREFOX ON WINDOWS: 65508 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0
BRAVE ON MAC: 65508 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36
FIREFOX ON MAC: 65508 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:130.0) Gecko/20100101 Firefox/130.0
SAFARI ON MAC: 65508 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Safari/605.1.15
我没有找到任何不支持低于 Django
runserver
65,536 个字符 URI 限制的现代浏览器,并且我没有在 Linux 上进行测试。