J2ME浏览器能够打开的URL最大长度是多少?

3

最大长度的URL是多少?

这可能与手机型号有关;在桌面上,它绝对取决于浏览器,正如这个问题所讨论的那样。

我对规范或参考文献以及经验数据都很感兴趣。

我的特定用例是将一个非常长的(约1600个字符)URL传递给MIDlet.platformRequest(String url),但失败了。其中绝大部分的URL(约1575个字符)是查询。

传递非常长的URL时是否有其他注意事项(例如移动代理和网关截断URL)?

4个回答

2
根据HTTP规范,您可以至少依赖255个字符,但超过这个长度是由浏览器决定的。例如,根据各种来源,IE将URL路径部分限制为2048个字符,而Apache似乎对大于约4000个字符的URL发出警告。
来源:WWW FAQs: What is the maximum length of a URL? 我找不到任何有关J2ME浏览器URL限制的参考资料。
更新:“在移动浏览领域,URL限制可能会低得多。许多手机仍然不支持超过128、256或512个字符的URL,特别是WAP设备(而不是携带完整的HTTP浏览器的设备)。”
来源:Maximum URL Length Web Analytics

谢谢。我在查看我所提到的问题时,已经审阅了这个链接。它没有提到移动手机。 - jamesh
第二个链接(“只是另一个网络日志”)声称这一点,没有任何来源。不幸的是,这并没有真正回答问题。我感谢你的努力。 - jamesh
@jamesh:老实说,我认为很难有一个明确的答案。除了HTTP之外,似乎没有任何标准,在没有任何标准的情况下,手机浏览器可能会根据制造商认为最好的方式来限制URL。 - Stephen C

0

简短回答:这取决于情况,但可能会很长。

经过对SonyEricsson J2ME模拟器(WTK 2.2.4)、K610i和三星U700V的调查后,得到了以下长篇回答。


经验测试:从模拟器中,platformRequest() 直接将 URL 传递给桌面浏览器(在本例中为 Firefox)。

http://test.example.com/?q=2048xxxxxxxxxxxxxxxxxxxxxxxxxxxx... xxxxxxxxxxxxxxxxxx2048

查看测试服务器的日志,我们发现可以从模拟器通过非常长的URL传递到桌面和服务器。

在设备上(例如SonyEricsson K610i,用户代理:“SonyEricssonK610i/R1CB Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1”),至少可以处理长度为3072个字符的URL(上限约为3800)。

在第二个设备Samsung U700V上,用户代理:“Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 MG(Novarra-Vision/7.3)” ,URL长度的下限为2048,但上限小于3072。请注意,这可能是Novarra转码器的问题,已知它至少会重新编写用户代理字符串。

没有Novarra转码(切换网络)的情况下,U700V具有用户代理"SAMSUNG-SGH-U700-Vodafone/BUGK1 SHP/VPP/R5 NetFront/3.4 Qtv5.3 SMM-MMS/1.2.0 profile/MIDP-2.0 configuration/CLDC-1.1",并且具有3072个字符的下限。


这个实验有效地结束了我对这个问题的兴趣,因为这个经验性测试证明了我的理论,即 URL 长度的上限导致了我的问题无效。

然而,为了完整起见,我将包括一个可能导致我的问题的原因:

连接所需的 URL 至少有两个查询参数。分隔查询的和号似乎会让模拟器混淆。

模拟器会默默地丢弃第二个参数。

在三星手机上,如果没有第二个参数,浏览器可以连接,但是长参数会损坏或丢失。

在 K610i 上使用第二个参数时,浏览器无法正常启动。


0
正如@Stephen C所指出的那样,您只能确保前255个字符被传递。您能否修改应用程序以使用POST方法?在POST事务中发送的数据量没有限制。

很遗憾,我无法控制服务器,因此无法更改连接方法。 我也没有选择服务提供商的权利。 - jamesh
@jamesh: 这很不幸,因为使用POST并限制自己只能使用小URL是你唯一真正的选择,据我所知。 - Stephen C

-4

Microsoft Internet Explorer(浏览器) 微软表示,Internet Explorer中URL的最大长度为2,083个字符,其中路径部分的字符数不得超过2,048个。在我的测试中,尝试使用超过此长度的URL会在Internet Explorer中产生明显的错误消息。 Firefox(浏览器) 在Windows Firefox 1.5.x中,超过65,536个字符后,位置栏不再显示URL。但是,更长的URL仍然可以工作。我在测试了100,000个字符后停止了测试。 Safari(浏览器) 至少80,000个字符可以工作。我在测试了80,000个字符后停止了测试。 Opera(浏览器) 至少190,000个字符可以工作。我在测试了190,000个字符后停止了测试。Windows版Opera 9即使在190,000个字符时仍然可以在位置栏中显示完全可编辑、可复制和可粘贴的URL。 Apache(服务器) 我早期尝试测量Web浏览器中URL的最大长度时遇到了约4,000个字符的服务器URL长度限制,此后Apache会产生“413 Entity Too Large”错误。我使用了Red Hat Enterprise Linux 4中找到的最新Apache版本。官方Apache文档仅提到请求中单个字段的8,192字节限制。 Microsoft Internet Information Server 默认限制为16,384个字符(是的,微软的Web服务器接受比微软的Web浏览器更长的URL)。这是可配置的。 Perl HTTP :: Daemon(服务器) 最多可使用8,000个字节。使用Perl的HTTP :: Daemon模块构建Web应用程序服务器时,将遇到所有HTTP请求标头的组合大小的16,384字节限制。这不包括POST方法表单数据、文件上传等,但包括URL。实际上,当URL显着长于8,000个字符时,会导致413错误。可以轻松地消除此限制。查找Daemon.pm中所有16x1024出现的位置,并将它们替换为较大的值。当然,这会增加您面临拒绝服务攻击的风险。 建议 极长的URL通常是一个错误。超过2,000个字符的URL在大多数流行的Web浏览器中无法工作。如果您打算使您的网站适用于大多数互联网用户,请勿使用它们。

当您希望提交包含许多字段的表单时,否则会产生非常长的URL,标准解决方案是使用POST方法而不是GET方法:
...

表单字段随后作为HTTP事务体的一部分传输,而不是URL的一部分,并且不受URL长度限制。短暂的信息不应存储在URL中。

作为一个经验法则,如果某个信息不需要在返回到收藏夹或书签时重新生成相同的页面,则它不属于URL。 书签问题 在非常罕见的情况下,将大量“状态”信息保留在URL中可能是有用的。例如,地图导航网站的用户可能希望将当前显示的地图添加到其“书签”或“收藏夹”列表中并稍后返回。如果您必须这样做,并且您的URL接近2000个字符的长度,请尽可能紧凑地表示信息,挤出尽可能多的“空气”。如果您的字段名称占用了太多空间,请改用固定字段顺序。挤出任何不真正需要被书签的字段。避免使用大的十进制数-只使用必要的精度,并考虑使用字母和数字的base-64表示(我没有说这很容易)。

在极端情况下,考虑使用gzip算法压缩您漂亮但过长的URL。然后,使用仅包含URL合法字符的base64重新编码二进制数据。这可以获得3-4倍的空间收益,但在下次访问时解压缩URL时需要一些CPU时间。再次强调,我从未说过这很容易!
另一种选择是将状态信息存储在文件或数据库中。然后,您只需存储在URL中查找该信息所需的标识符即可。这里的缺点是您将拥有许多状态文件或数据库记录。其中一些可能与其他人运行的网站上的链接相关联。解决此问题的一种方法是在一定时间后删除未被重新访问的URL的状态文件或数据库记录。

3
对于一份格式不佳的剽窃内容并将其冒充为自己的言论而没有提及原始来源(已在Stephen的回答中提供链接),我会给予负面评价。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接