减少URL大小的方法?

减少URL大小的方法?,url,web-applications,architecture,Url,Web Applications,Architecture,因此,我们有一个非常大和复杂的网站,需要在URL中放置大量的状态信息。大多数情况下,这只是桃子和应用程序工作得很好。然而,有(越来越多的)实例的URL长度变得非常长。由于URL长度的限制,这在IE中造成了巨大的问题 我想知道,人们使用了哪些策略/方法来缩短URL的长度?具体来说,我只需要减少URL中的某些参数,可能不是全部 在过去,我们将一些状态数据推送到会话中。。。但是,这会降低应用程序中的可寻址性(这一点非常重要)。因此,任何能够保持可寻址性的策略都会受到青睐 谢谢 编辑:回答一些问题并稍作

因此,我们有一个非常大和复杂的网站,需要在URL中放置大量的状态信息。大多数情况下,这只是桃子和应用程序工作得很好。然而,有(越来越多的)实例的URL长度变得非常长。由于URL长度的限制,这在IE中造成了巨大的问题

我想知道,人们使用了哪些策略/方法来缩短URL的长度?具体来说,我只需要减少URL中的某些参数,可能不是全部

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

谢谢

编辑:回答一些问题并稍作澄清,我们的大多数参数都不是问题。。。然而,其中一些是动态生成的,可能非常长。这些参数可以包含URL中合法的任何内容(意味着它们不只是数字或字母,可以是任何内容)。区分大小写可能重要,也可能不重要


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

如果不想将该数据存储在会话作用域中,可以:

  • 将数据作为POST参数发送(在隐藏字段中),因此数据将在HTTP请求体中而不是URL中发送
  • 将数据存储在数据库中,并来回传递一个密钥(允许您访问相应的数据库记录),这会带来很多可伸缩性问题,可能还会带来安全问题。我认为这种方法类似于使用会话范围
我们的大多数参数都不是问题。。。然而,其中一些是动态生成的,可能非常长

如果您希望在URL中保留完整的状态信息,而不需要在会话中存储数据,或者永久性地在服务器端存储数据,那么我看不出有什么办法可以避免这种情况

使用某些压缩算法可能会节省一些字节,但这会使URL不可读,大多数算法在处理小字符串时效率不高,而且压缩不会产生可预测的结果

我唯一想到的其他想法是

  • 缩短参数名称(
    query
    =>
    q
    page
    =>
    p
    ..)可能会节省一些字节

  • 如果参数顺序非常静态,使用mod_重写的目录结构
    /url/param1/param2/param3
    可能会节省一些字节,因为您不需要使用参数名称

  • 任何重复的数据都可以“缩短”为数字ID或更短的标识符(如公司分支机构的地名、产品名称等),保存在内部、全局、永久的查找表中(
    London
    =>
    1
    Paris
    =>
    2

除此之外,我认为在服务器端存储数据(如@Guido已经建议的那样由随机键标识)是唯一真正的方法。好的一面是,您根本没有大小限制:像这样的URL

example.com/?key=A23H7230sJFC
可以在服务器端“包含”您想要的任何信息

当然,不利的一面是,为了使这些URL可靠地工作,您必须将数据无限期地保留在服务器上。这就像有你自己的小网址缩短服务。。。这是否一个有吸引力的选择,将取决于总体情况


我想差不多就是这样

当它们确实是可导航参数时,一个好的选择是将这些参数放入URL的第一部分,例如

=>

如果URL中的数据是自动生成的,您不能在需要时再次生成它吗


由于信息不多,很难想出解决方案,但我首先要研究RESTful体系结构在使用超媒体(即链接)保持状态方面的作用。REST in Practice()是关于这个主题的一本非常好的书。

不确定您使用的是什么应用程序。我也遇到过同样的问题,我使用了两种解决方案(ASP.NET):

  • 使用Server.Transfer和HttpContext(在.NET2+中的PreviousPage)访问保存数据的源页面的公共属性
  • 将Server.Transfer与源页面中的隐藏字段一起使用
  • 在querystring上使用压缩

  • 我想说的是,如果你不想将数据推送到会话中,你的选择就会变得非常有限,这实际上取决于URL包含的信息类型。如果一个URL包含一段较长的丘吉尔名言,那么如果它本身是有效的,那么它将很难被压缩;一个包含可以缩写的状态信息(如
    q
    而不是
    query
    ,固定类别或常量的缩写ID…)可能更容易。我实际上倾向于压缩路径。。。看起来有了gZip,我可以从1400个字符到1000个字符。。。不过,我还需要进行更多的测试,以确保这是值得的。你的其他建议也都很好。是的,这是一个非常好的建议。。。我希望我们在规划网站时能考虑到这一点。避免这些问题会容易得多。鉴于我们的具体情况,这实际上是可能的。谢谢