GET方式传值的最大长度

Nov 23rd, 2009

php get传值最大是多少?我不能确定了

问题见:http://bbs.blueidea.com/thread-2958509-1-1.html

这个问题我也不知道答案,写个程序就可以知道结果了。

<?php
    if($_GET['a'])
        echo $_GET['a'];
    else{
        $offset = 1024;
        while(1){
            $backString = $string;
            $string .= str_repeat('1', intval($offset));
            $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].'?a='.$string;
            $t = @file_get_contents($url);
            if($t && $t==$string){//如果传的值和获取的数据相等,则存起长度
                $max = strlen($t);
            }elseif($offset!=1){//如果步长不为1...保证精确度
                $offset = $offset/2;
                $string = $backString;
            }else{
                break;
            }
        }
        echo "Max length with GET method is ".$max;//Max length with GET method is 8164
    }

我得出的结论是GET方式传值的最大长度是8164字节,差不多8K。

测试的浏览器有:IE8, FF3, chorme4.0.222

参看了一些网上的说法

IE官方的资料

Microsoft Internet Explorer 具有 2,083 个字符的最大的统一资源定位符 (URL) 长度。 Internet Explorer 也有 2,048 个字符的最大路径长度。 此限制适用于 POST 请求和 GET 请求 url。 如果使用的 GET 方法您限于减去实际路径中的字符数的 2,048 字符的最大值。 但是,POST 方法不是受用于提交的名称/值对 URL 的大小。 这些对标头中并不在 URL 中传输。 RFC 2616、"超文本传输协议--HTTP/1.1,"则不需要指定 URL 长度的任何要求。

无语了,2083和8164悬殊很大呢!哪个错了呢?我觉得我的程序没有问题的。

 

2010-01-22更新

对于小秦童鞋说的.是file_get_content所支持的URL长度决定的.

我用CURL, socket分别作了测试
file_get_content 结果8167
curl 结果8167
socket 结果8000

既然发送GET方式8167字节能够请求成功

说明socket能够请求的最大长度应该就是8000字节了

随后在FF里打开一个参数长度为8167字节的url...正常打开

将长度调整为8168, 报出414错误

Request-URI Too Large

The requested URL's length exceeds the capacity limit for this server.


Apache/2.0.63 (Win32) DAV/2 PHP/5.2.11 Server at local Port 80

在IE浏览器里URL参数8167字节正常, 但是无法实现8168字节. IE8不让输入.

另外上述2083是整个URL的strlen....得到了证实...http://local/ok.php?a=(8167字节长度的参数)差不多就是2083了

但是在apache里显示的长度是8167+

评论

  • 公子扬的头像
    公子扬
    呵呵·哥们··喜欢你的风格·
    能分享下吗··
    给我发来吗·?
    谢谢哥们啊 ···麻烦你了啊···
    2009-11-27 23:33 - Reply
  • 你这个的测试结果,只是PHP的file_get_contents所支持的以GET方式获取URL内容的URL地址的最大长度,而不是浏览器所支持的最大长度.
    2009-12-18 09:49 - Reply
  • @小秦
    有道理,回头再试试.
    2010-01-16 22:32 - Reply
  • sychen的头像
    sychen
    还是post传得多,呵呵~
    2010-01-22 11:28 - Reply

打分

3 .3

共计3次打分

发表评论

  • 用户名
  • 邮箱
  • 链接