关于URL最大长度限制的相关资料查证


Posted in PHP onDecember 23, 2014

在开发调试支付宝接口时,突然发现支付宝接口的URL很长,远远大于之前自己印象中的255个字符。赶紧搜索查证了一番,理解如下:

URL不能大于255bytes的说法确实存在,在RFC2616中提到:

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).
Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.

从上一点也可以看出,255bytes的说法也是为了兼容性考虑。实际上现代浏览器的限制如下:

Microsoft Internet Explorer (Browser) 

Microsoft states that the maximum length of a URL in Internet Explorer is 2,083 characters, with no more than 2,048 characters in the path portion of the URL. In my tests, attempts to use URLs longer than this produced a clear error message in Internet Explorer.
Firefox (Browser) 
After 65,536 characters, the location bar no longer displays the URL in Windows Firefox 1.5.x. However, longer URLs will work. I stopped testing after 100,000 characters.
Safari (Browser) 

At least 80,000 characters will work. I stopped testing after 80,000 characters.
Opera (Browser) 

At least 190,000 characters will work. I stopped testing after 190,000 characters. Opera 9 for Windows continued to display a fully editable, copyable and pasteable URL in the location bar even at 190,000 characters.
Apache (Server) 
My early attempts to measure the maximum URL length in web browsers bumped into a server URL length limit of approximately 4,000 characters, after which Apache produces a “413 Entity Too Large” error. I used the current up to date Apache build found in Red Hat Enterprise Linux 4. The official Apache documentation only mentions an 8,192-byte limit on an individual field in a request.
Microsoft Internet Information Server 
The default limit is 16,384 characters (yes, Microsoft's web server accepts longer URLs than Microsoft's web browser). This is configurable.
Perl HTTP::Daemon (Server) 

Up to 8,000 bytes will work. Those constructing web application servers with Perl's HTTP::Daemon module will encounter a 16,384 byte limit on the combined size of all HTTP request headers. This does not include POST-method form data, file uploads, etc., but it does include the URL. In practice this resulted in a 413 error when a URL was significantly longer than 8,000 characters. This limitation can be easily removed. Look for all occurrences of 16×1024 in Daemon.pm and replace them with a larger value. Of course, this does increase your exposure to denial of service attacks.

另外值得注意的是,有文章提到作为<a>的href属性时,URL不能超过1024bytes,这点没有详细查证

综上,URL还是不适合太长,不是不得已,尽量不要通过GET方式提交大量参数,可以考虑用POST方式(大约在2M左右,应该是和服务器及设定有关)。另外这么长的URL在访问和收藏(有文章提到有些浏览器在收藏超长地址时也是会出现问题)时也是相当不友好的。当然,之前数据库字段设置时还是作为255bytes处理,现在可能要考虑扩充一下了。

PHP 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
PHP 多维数组排序(usort,uasort)
Jun 30 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
基于php缓存的详解
May 15 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
Mar 21 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 PHP
laravel orm 关联条件查询代码
Oct 21 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 #PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 #PHP
php天翼开放平台短信发送接口实现方法
Dec 22 #PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 #PHP
WebQQ最新登陆协议的用法
Dec 22 #PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 #PHP
php有道翻译api调用方法实例
Dec 22 #PHP
You might like
php设计模式  Command(命令模式)
2011/06/17 PHP
php支付宝接口用法分析
2015/01/04 PHP
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
webpack入门必知必会
2017/01/16 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
python使用xmlrpc实例讲解
2013/12/17 Python
python实现ftp客户端示例分享
2014/02/17 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
办公室主任先进事迹
2014/01/18 职场文书
教师师德承诺书
2014/03/26 职场文书
群众路线领导对照材料
2014/08/23 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
自荐信范文
2019/05/20 职场文书
python如何做代码性能分析
2021/04/26 Python