GET方式传值的最大长度
Nov 23rd, 2009php 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
小秦
2009-12-18 09:49 - Reply
Lin.x
有道理,回头再试试.
2010-01-16 22:32 - Reply
sychen
2010-01-22 11:28 - Reply