减少网址大小的方法?

时间:2010-09-08 19:01:08

标签: url web-applications architecture

因此,我们有一个非常庞大而复杂的网站,需要将大量状态信息放在网址中。大多数时候,这只是桃子,应用程序运行良好。但是,(URL越来越多)实例的URL长度变得非常长。由于URL长度限制,这在IE中导致了巨大的问题。

我想知道,人们用什么策略/方法来减少网址的长度?具体来说,我只需要减少URL中的某些参数,也许不是整个事情。

过去,我们已将部分状态数据推送到会话中......但这会降低我们应用程序的可寻址性(这非常重要)。因此,任何可以保持可寻址性的策略都会受到青睐。

谢谢!

编辑:为了回答一些问题并澄清一点,我们的大部分参数都不是问题......但是其中一些参数是动态生成的,可能会很长。这些参数可以包含URL中的任何合法内容(意味着它们不仅仅是数字或只是字母,可以是任何内容)。区分大小写可能也可能不重要。

另外,理想情况下我们可以将这些转换为POST,但是由于需要进行巨大的架构更改,我认为这不可能。

5 个答案:

答案 0 :(得分:3)

如果您不想将该数据存储在会话范围内,您可以:

  • 将数据作为POST参数发送(在隐藏字段中),因此数据将在HTTP请求正文中发送而不是URL
  • 将数据存储在数据库中并来回传递密钥(这使您可以访问相应的数据库记录),这会打开很多可扩展性并可能出现安全问题。我想这种方法类似于使用会话范围。

答案 1 :(得分:2)

  

我们的大多数参数都不是问题......但是其中一些参数是动态生成的,可能很长

如果您想在URL中保留完整的状态信息而不想在会话中存储数据,或者永久地在服务器端存储数据,我看不到解决此问题的方法。

可能使用某种压缩算法保存几个字节,但它会使URL不可读,大多数算法在小字符串上效率不高,压缩不会产生可预测的结果。

唯一想到的其他想法是

  • 缩短参数名称(query => qpage => p ...)可能会节省几个字节

  • 如果参数顺序非常静态,则使用mod_rewritten目录结构/url/param1/param2/param3可能会节省几个字节,因为您不需要使用参数名称

  • 无论数据是重复的还是可以“缩短”回数字ID或更短的标识符(如公司分支机构的地名,产品名称......),请保留在内部的全局永久查找表中({ {1}} => London1 => 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):

  1. 使用Server.Transfer和HttpContext(.Net 2+中的PreviousPage)来访问保存数据的源页面的公共属性。
  2. 使用Server.Transfer以及源页面中的隐藏字段。
  3. 在查询字符串上使用压缩。