URL 长度限制
结论:前后端任何请求的 URL 建议限制长度,否则请求可能会失败。
HTTP 协议对 URL 长度的描述
The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15).
HTTP协议没有对URI的长度进行任何事先的限制。服务器必须能够处理它们所服务的任何资源的URI,并且如果它们提供了可以生成此类URI的基于get的表单,则应该能够处理无界长度的URI。如果一个URI超过了服务器的处理能力,服务器应该返回**414 (Request-URI Too Long)**状态。
虽然 HTTP 协议没有限制 URL 的长度,但是允许服务器对其进行限制。而且客户端(浏览器)一般也有自己的 URL 长度限制。
浏览器 URL 最大长度限制
每个浏览器对 URL 长度的最大限制不同,当超过最大限制后页面不会正常打开。
这个长度无法通过浏览器设置修改(反正我没找到方法)。
浏览器最大长度限制参考:
浏览器 | 最大长度(字符数) |
---|---|
Internet Explorer | 2048 |
Edge | 4035 |
Firefox | 65536 |
Chrome | 8182 |
Safari | 80000 |
Opera | 190000 |
服务器 URL 最大长度限制
服务器可以通过配置修改最大长度。
服务器最大长度限制参考:
服务器 | 最大长度(字符数) |
---|---|
Apache(Server) | 8192 |
IIS | 16384 |
Nginx | 4096 |
Tomcat | 65536 |
总结
HTTP 协议没有限制 URL 的最大长度,但是浏览器和服务器都有自己的要求,当超过最大长度,请求可能不会正常工作。
所以建议项目中使用的 URL 长度最好不要超过 IE 的最大长度限制(2038),一些大公司的项目,往往设置的更小(例如几百个字符)。
开发中需要注意的是:
- URL 上的中文字符会被浏览器编码(urlencode),如果浏览器编码为 UTF8,一个汉字将最终编码后的字符长度为9个字符,例如
长
将会编码为\u957f
- URL 长度超限一般发生在将参数拼接到 URL 上进行传递的方式,开发时应尽量避免这种方式进行传递。
- webpack 打包体积较小的图片时会将其优化转换成 DataUrl 地址,如果内容比较丰富,地址也会很长。