【转】URL最大长度问题

今天在测试Email Ticket的时候发如今进行Mark as Read/Unread操做时,请求是经过GET方式进行的。URL中列出了全部参与该操做的Ticket Id。因而,我想起GET请求是有最大长度限制的。遂输入超长一串Ticket Id进行请求,结果页面报错以下:web

HTTP Error 404.15 - Not Found

The request filtering module is configured to deny a request where the query string is too long.chrome

Most likely causes:apache

  • Request filtering is configured on the Web server to deny the request because the query string is too long.

Things you can try:ubuntu

  • Verify the configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting in the applicationhost.config or web.config file.

Links and More InformationThis is a security feature. Do not change this feature unless the scope of the change is fully understood. You can configure the IIS server to reject requests whose query string is greater than a specified value. If the request's query string is greater than the configured value, this error is returned. If the allowed length of the query string needs to be increased, modify the configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting.浏览器

View more information »服务器

通过一番搜索以后,发现IIS 7对于Query String有长度限制。默认为2048.app

该问题的解决办法能够经过修改configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting.less

<requestLimits maxQueryString="length" />

具体能够查看微软KB: Error message when you visit a Web site that is hosted on a server that is running IIS 7.0: "HTTP Error 404.15 – Not Found"测试

 

 

搜索过程当中发现,各浏览器与各Web Server对URL均有长度的限制以下:this

在http协议中,其实并无对url长度做出限制,每每url的最大长度和用户浏览器和Web服务器有关,不同的浏览器,能接受的最大长度每每是不同的,固然,不同的Web服务器可以处理的最大长度的URL的能力也是不同的。
下面就是对各类浏览器和服务器的最大处理能力作一些说明.

Microsoft Internet Explorer (Browser)
IE浏览器对URL的最大限制为2083个字符,若是超过这个数字,提交按钮没有任何反应。在个人测试中,这个数字获得验证。

微软官方也有说明:

Microsoft Internet Explorer has a maximum uniform resource locator (URL) length of 2,083 characters. Internet Explorer also has a maximum path length of 2,048 characters. This limit applies to both POST request and GET request URLs.
If you are using the GET method, you are limited to a maximum of 2,048 characters, minus the number of characters in the actual path.
However, the POST method is not limited by the size of the URL for submitting name/value pairs. These pairs are transferred in the header and not in the URL.

Firefox (Browser)
对于Firefox浏览器URL的长度限制为65,536个字符,但当我测试时,最大只能处理8182个字符,这是由于url的长度除了浏览器限制外,还会受Web服务器的限制,而我本机使用的是ubuntu apache服务器,最大处理能力为8192个字符(相差10个字符,不知道是什么缘由),一旦超过这个长度,服务器就返回以下错误信息。

Safari (Browser)
URL最大长度限制为 80,000个字符。

Opera (Browser)
URL最大长度限制为190,000个字符。

Google (chrome)
url长度一旦超过8182个字符时,出现以下服务器错误:

写道

Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.
Apache/2.2.12 (Ubuntu) Server at 127.0.1.1 Port 80

Apache (Server)
能接受最大url长度为8,192个字符,但个人测试数据是8,182。

Microsoft Internet Information Server(IIS)
能接受最大url的长度为16,384个字符。

经过上面的数据可知,为了让全部的用户都能正常浏览,咱们的URL最好不要超过IE的最大长度限制(2083个字符),固然,若是URL不直接提供给用户,而是提供给程序调用,侧这时的长度就只受Web服务器影响了。

注:可能有些朋友会想固然的认为,若是最大长度限制为2083字符,是否是参数差很少能够传递1000个左右的汉字。这样认为实际上是不对的,对于中文的传递,最终会为urlencode后的编码形式进行传递,若是浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。

相关文章
相关标签/搜索