因此,我们有一个非常庞大而复杂的网站,需要将大量状态信息放在网址中。大多数时候,这只是桃子,应用程序运行良好。但是,(URL越来越多)实例的URL长度变得非常长。由于URL长度限制,这在IE中导致了巨大的问题。
我想知道,人们用什么策略/方法来减少网址的长度?具体来说,我只需要减少URL中的某些参数,也许不是整个事情。
过去,我们已将部分状态数据推送到会话中......但这会降低我们应用程序的可寻址性(这非常重要)。因此,任何可以保持可寻址性的策略都会受到青睐。
谢谢!
编辑:为了回答一些问题并澄清一点,我们的大部分参数都不是问题......但是其中一些参数是动态生成的,可能会很长。这些参数可以包含URL中的任何合法内容(意味着它们不仅仅是数字或只是字母,可以是任何内容)。区分大小写可能也可能不重要。
另外,理想情况下我们可以将这些转换为POST,但是由于需要进行巨大的架构更改,我认为这不可能。
答案 0 :(得分:3)
如果您不想将该数据存储在会话范围内,您可以:
答案 1 :(得分:2)
我们的大多数参数都不是问题......但是其中一些参数是动态生成的,可能很长 p>
如果您想在URL中保留完整的状态信息而不想在会话中存储数据,或者永久地在服务器端存储数据,我看不到解决此问题的方法。
你可能使用某种压缩算法保存几个字节,但它会使URL不可读,大多数算法在小字符串上效率不高,压缩不会产生可预测的结果。
唯一想到的其他想法是
缩短参数名称(query
=> q
,page
=> p
...)可能会节省几个字节
如果参数顺序非常静态,则使用mod_rewritten目录结构/url/param1/param2/param3
可能会节省几个字节,因为您不需要使用参数名称
无论数据是重复的还是可以“缩短”回数字ID或更短的标识符(如公司分支机构的地名,产品名称......),请保留在内部的全局永久查找表中({ {1}} => London
,1
=> Paris
...)
除此之外,我认为在服务器端存储数据(由随机密钥识别为@Guido已经暗示)是唯一真正的方法。好的一面是你根本没有尺寸限制:像
这样的网址2
可以根据需要在服务器端“包含”尽可能多的信息。
当然,缺点是,为了使这些URL可靠地运行,您必须无限期地将数据保留在服务器上。这就像拥有自己的小URL缩短服务......这是否是一个有吸引力的选择,将取决于整体情况。
我认为这就是它!
答案 2 :(得分:1)
当它们确实是可导航参数时,一个很好的选择是将这些参数用于URL的第一部分,例如。
http://example.site.com/ViewPerson.xx?PersonID=123 => http://example.site.com/View/Person/123/
答案 3 :(得分:1)
如果自动生成URL中的数据,您是否只需在需要时再次生成它?
由于信息很少,很难想到解决方案,但我首先要研究RESTful架构在使用超媒体(即链接)来保持状态方面所做的工作。 实践中的REST (http://tinyurl.com/287r6wk)是一本关于这个主题的非常好的书。
答案 4 :(得分:1)
不确定您使用的是哪种应用程序。我遇到了同样的问题,我使用了几个解决方案(ASP.NET):