我正在构建一个HTML5单页面应用程序,我希望允许用户保留当前的应用程序状态以供以后使用。我想通过创建一个指向我页面的链接URL来实现这一目标,并使用特制的查询部分。当再次调用时,使用URL,应用程序将解析查询部分并重新创建存储状态。
现在,州的某些部分是一个列表,其项目是数值和相关文本。浮点数值以及文本不需要是唯一的。
像这样:
4.54 first
12.1 another
12.1 more
34 more
我的目的是创建一个这样的URL:
www.myappdomain.com/SinglePage.html?4.54=first&12.1=another&12.1=more&34=more
这是合法网址吗?如果对文本进行适当的编码,这会在野外工作吗?
我已阅读What Every Developer Should Know About URLs by Alan Skorkin,我通常可以推荐这些网址和Answer about URL character usage。
对我来说,这样做似乎是合法的,但我仍然觉得有点不舒服,因为我没有找到关于我可能拥有的非唯一键以及数字作为查询部分中的键的信息。
答案 0 :(得分:2)
这是URI规范的合法网址 - http://tools.ietf.org/html/rfc3986。但是,这是否会在野外工作是一个不同的问题,因为规范只定义了URI的通用语法。
由于没有关于在查询部分中应该对重复键做什么的说明(参见Authoritative position of duplicate HTTP GET query keys),不同的软件框架将以不同的方式处理这些URI。但是,大多数框架都会正确地将重复键检测为具有相同键的多个值,并将这些值组合到给定键的单个数组/值列表中(而不是使用给定键的最后一个值并丢弃所有先前的值那个钥匙)。使用数字作为键也可以,因为键被解析为文本字符串。简而言之:你应该是安全的。
答案 1 :(得分:0)
我认为这不是传递数据的好方法,查询字符串参数一般被认为是可以通过名称访问的参数,这里你实际上传递了一些数据作为参数,而从技术角度来看这可以做到它使你的代码有点混淆,我会使用JSON编码在单个参数中传递这些数据
答案 2 :(得分:0)
这篇文章表明,没有规定说非唯一密钥无效。
Authoritative position of duplicate HTTP GET query keys
我似乎找不到任何关于数字键的具体内容。
但是,如果您不希望出于任何原因使用非唯一数字键,则可能是一种解决方法:使用一些基本编码将数字映射到字符串。基本的东西可以是1-a,2-b,3-c,4-d ...... 9-i,0-j。和'。'可能是'k'(如果没有关于'。'是否是URL参数中的合法字符的规范)
然后,例如,21.3
将编码为bakc
。您还可以在编码密钥的末尾添加一个数字,以确保密钥是唯一的。解码时会忽略这些数字(或者可以帮助区分参数)。然后第一个21.3将编码为bakc1,下一个bakc2等)