GET请求中URL的最大长度限制总结

本文详细介绍了不同浏览器(如IE、Firefox、Chrome等)和服务器(如Apache、IIS等)对于URL长度的限制,并提供了具体的数值,对于进行跨域请求时避免414错误有重要的参考价值。

由于jsonp跨域请求只能通过get请求,url长度根据浏览器服务器的不同而有不同限制。 若要支持IE的话,最大的长度为2083字符,若是中文字符的话只有2083/9=231个字符。 若是Chrom...

关键字:   服务器,浏览器,url长度限制

GET请求中URL的最大长度限制总结

今天在写一个php相应jsonp请求的功能时,发现当url中包含的请求参数过长时会返回414错误。


如下图

1

  1. <html>
  2. <head><title>414 Request-URI Too Large</title></head>
  3. <body bgcolor="white">
  4. <center><h1>414 Request-URI Too Large</h1></center>
  5. <hr><center>nginx</center>
  6. </body>
  7. </html>

在网上查询之后,浏览器服务器url长度都有限制,现总结如下。

浏览器


1、IE

IE浏览器(Microsoft Internet Explorer) 对url长度限制是2083(2K+53),超过这个限制,则自动截断(若是form提交则提交按钮不起作用)。

2、firefox

firefox(火狐浏览器)的url长度限制为 65 536字符,但实际上有效的URL最大长度不少于100,000个字符。

3、chrome

chrome(谷歌)的url长度限制超过8182个字符返回本文开头时列出的错误。

4、Safari

Safari的url长度限制至少为 80 000 字符。

5、Opera

Opera 浏览器的url长度限制为190 000 字符。Opera 9 地址栏中输入190 000字符时依然能正常编辑。

服务器


1、Apache

Apache能接受url长度限制为8 192 字符

2、IIS

Microsoft Internet Information Server(IIS)能接受url长度限制为16 384个字符。
这个是可以通过修改的(IIS7)configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryStringsetting.<requestLimits maxQueryString="length"/>

3、Perl HTTP::Daemon

Perl HTTP::Daemon 至少可以接受url长度限制为8000字符。Perl HTTP::Daemon中限制HTTP request headers的总长度不超过16 384字节(不包括post,file uploads等)。但当url超过8000字符时会返回413错误。
这个限制可以被修改,在Daemon.pm查找16×1024并更改成更大的值。

4、ngnix

可以通过修改配置来改变url请求串的url长度限制。

client_header_buffer_size 默认值:client_header_buffer_size 1k

large_client_header_buffers默认值 :large_client_header_buffers 4 4k/8k


由于jsonp跨域请求只能通过get请求,url长度根据浏览器及服务器的不同而有不同限制。
若要支持IE的话,url长度限制为2083字符,若是中文字符的话只有2083/9=231个字符。
若是Chrome浏览器支持的最大中文字符只有8182/9=909个。

<think>首先,用户的问题是:"我想查询URL GET请求传值的最大长度",这在用户的消息中明确提到。用户引用了多个来源,我需要基于这些引用提供准确答案。 关键引用: - 引用[1]:解释了GET请求长度限制不是由HTTP协议规范设定的,而是由特定的浏览器和服务器限制的。提供了各种浏览器和服务器对URL长度的最大处理能力: - IE:2083个字符 - Firefox:65536个字符 - Safari:80000个字符 - Opera:190000个字符 - Google (Chrome):8182个字符 - Apache:8192个字符 (准确度待定) - IIS:16384个字符 同时提到,HTTP协议没有对URL长度限制限制来自浏览器和服务器。POST理论上没有大小限制,但服务器可能有处理能力限制。 - 引用[2]:讨论了URL传值和POST传值,指出GET传值在URL中不安全且数据量受限制。 - 引用[3]:关于LimitRequestLine指令,用于设置服务器允许的URL最大长度。 - 引用[4]:关于HTTP和GET方法的介绍,但用户已说明这些引用仅供参考,不是真正需求。 用户明确说:"上述引用仅供参考,并不是用户真正的需求",所以我应该专注于用户的核心问题:URL GET请求传值的最大长度。 从引用中提取关键点: - HTTP协议本身没有限制URL长度。 - 实际限制由浏览器和服务器决定。 - 常见浏览器限制:Chrome ~8000字符,IE ~2000字符等。 - 服务器如Apache或IIS也有配置限制。 用户的问题指定了"URL GET请求传值的最大长度",这涉及到URL中查询字符串的长度(即?之后的部分)。引用[1]和[2]都提到了这一点。 我的回答需要: - 使用中文,因为系统指令要求。 - 结构清晰,逐步解答。 - 确保LaTeX语法正确:行内数学表达式用$...$,独立公式用$$...$$(如果需要)。 - 添加引用标识:[^n],基于引用的内容。 - 生成相关问题(系统指令第5点)。 回答结构: 1. **澄清HTTP协议规范**:解释HTTP协议没有URL长度限制。 2. **浏览器限制**:列出主要浏览器的实际限制。 3. **服务器限制**:讨论服务器端的配置如Apache的LimitRequestLine。 4. **实际应用建议**:建议使用POST处理大数据的理由(安全性、长度)。 5. **总结最大长度**:给出一个一般性答案,强调它取决于环境和配置。 引用标识: - 在相关段落末尾添加[^n],例如,提到浏览器限制时引用[^1],服务器限制时引用[^3]。 生成相关问题: - 基于主题,如如何配置服务器、为什么使用POST等。 完整回答: - 先直接回答用户问题。 - 然后详细解释。 - 最后生成相关问题。 确保答案真实可靠:基于提供的引用,避免添加未提及的内容。引用[1]是主要来源。 最终答案大纲: 1. 介绍:GET请求最大长度不是固定的;HTTP协议无限制,但浏览器和服务器有实际限制。 2. 详细浏览器限制(引用[^1])。 3. 服务器限制(引用[^3])。 4. 建议:如果需要传递大量数据,使用POST。 5. 生成相关问题。 </think>### URL GET请求传值的最大长度 URL GET请求最大长度并不由HTTP协议本身规定,而是受浏览器和服务器实现的限制。HTTP协议规范(如RFC 2616)明确表示URI长度无强制上限[^3],但在实际应用中,不同浏览器和服务器会施加具体约束,以避免性能问题或安全风险。以下我将逐步解释关键点,帮助您清晰理解。 #### 1. **HTTP协议规范无限制** - HTTP GET请求URL长度理论上无上限,因为协议未定义任何最大长度。这包括主机名、路径和查询字符串(即`?`之后的键值对)。引用[3]指出,URL长度限制主要源于服务器的配置,例如Apache的`LimitRequestLine`指令,用于设置请求行的最大字节数(请求行包括方法、URL和协议版本)[^3]。这意味着,协议本身允许任意长度,但实际执行中受环境制约。 #### 2. **浏览器端的实际限制** - 浏览器是主要限制来源,不同浏览器对URL最大长度有严格上限(基于字符数)。这些限制是为了防止内存溢出或渲染问题。以下是常见浏览器的实测限制: - **Internet Explorer (IE)**:最大约2083个字符(超出后请求可能失败)[^1]。 - **Google Chrome**:最大约8182个字符[^1]。 - **Firefox**:最大约65536个字符[^1]。 - **Safari**:最大约80000个字符[^1]。 - **Opera**:最大约190000个字符[^1]。 - 这些数值基于网络实测数据,但可能随浏览器版本更新而变化。超过限制时,浏览器可能截断URL或拒绝发送请求。 #### 3. **服务器端的实际限制** - 服务器软件也设置URL长度上限,以保护资源: - **Apache HTTP Server**:默认最大URL长度约8192字节(可通过`LimitRequestLine`指令调整)[^1][^3],例如: ```apache LimitRequestLine 16384 # 修改为16KB ``` - **Microsoft IIS (Internet Information Services)**:默认最大约16384个字符[^1]。 - **Tomcat (Java服务器)**:虽未直接限制URL,但GET请求长度受整体请求头大小影响(默认8KB)[^1]。 - 服务器限制通常可配置,但需权衡性能和安全性。 #### 4. **查询字符串部分的长度影响** - GET请求的“传值”部分指URL中的查询字符串(例如`example.com?key1=value1&key2=value2`)。引用[2]强调,查询字符串会暴露在URL中,存在安全风险(如数据泄露),且长度受浏览器和服务器限制[^2]。 - **实际建议**: - 如果传递小量数据(如少于2000字符),GET适用于简单查询。 - 如果数据量大或敏感(如表单提交),优先使用POST方法。POST的数据体(body)理论上无长度限制,HTTP协议未规定上限,但服务器可能有处理阈值(如Tomcat默认限2MB,可配置)[^1][^2]。 #### 5. **总结最大长度** - **一般性答案**:URL GET请求传值的最大长度**无统一标准**,取决于: - 浏览器限制(通常8000–190000字符)。 - 服务器配置(通常8000–16000字节)。 - 保守实践中,建议将查询字符串控制在**2000字符以内**以确保兼容性。超出时,改用POST方法更可靠。 如果您需要精确测试特定环境,可以使用工具如浏览器开发者工具或在线URL长度测试器进行验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值