这个url字符串概念叫什么?

时间:2016-06-12 12:19:28

标签: url query-string

我刚刚访问website,我发现他们在网址中有一个奇怪的查询字符串结构,它们似乎是键值对,当你在网站表单中进行更改时,值会更新URL。

以下是网址:

http://www.holidaysplease.co.uk/holiday-finder/#{"d":"2016-06-1","a":[],"t":20,"r":200,"f":13,"tr":180,"s":[5,4,3],"ac":[],"c":[],"sh":[],"dh":[],"du":null,"b":"500-4407"}

有谁知道这个概念叫什么?我记得曾经在基于Java的Web应用程序中看过它,但有人可以向我保证这是如何实现的以及用什么语言实现的?

4 个答案:

答案 0 :(得分:0)

看起来这是一个片段标识符。

维基百科says: 由散列标记#引入的片段标识符是文档的URL的可选的最后部分。它通常用于标识该文档的一部分。通用语法在RFC 3986中指定.URI中的哈希标记分隔符不属于片段标识符。

RFC 3986定义为here

之前,我以前从未见过。最重要的信息是一些研究给我的回馈。我希望这不是完全错误的。

答案 1 :(得分:0)

URL中#之后的文本是片段标识符,通常用于引用文档中的某个部分,但可以包含任何不会在请求中发送的数据服务器,但客户端可以使用JavaScript读取。

在您的示例中,片段标识符包含用JSON编码的数据结构,这是支持键值对和数组的序列化格式。

这里以更易读的形式提供了您示例中的JSON:

{
    "d": "2016-06-1",
    "a": [],
    "t": 20,
    "r": 200,
    "f": 13,
    "tr": 180,
    "s": [
        5,
        4,
        3
    ],
    "ac": [],
    "c": [],
    "sh": [],
    "dh": [],
    "du": null,
    "b": "500-4407"
}

答案 2 :(得分:0)

这背后的概念是用户输入的数据作为URL中的JSON structure发送到服务器。服务器将字符串作为JSON读取,并处理请求。

此过程在WebForm中非常有效,可以使用名为encodeURIComponent的方法完成。

我想你注意到,当日期发生变化时,它只会更新URL中的JSON。因此,他们以JSON格式将填充的数据发送到服务器。

在您的网址中

d - days and year
du - duration
a - holiday type
t - temperature
r - rainfall
f- fight time
tr - travel
s - star for the hotels
b - budgets

希望这些信息可以帮助您:)

答案 3 :(得分:0)

#之后的部分称为fragment identifier。客户端javascript代码可以使用location.hash访问片段的内容。在这种情况下,片段包含json数据。浏览器通常甚至不会将片段发送到Web服务器,因此它只用于客户端。

片段标识符的最常见用途是使用它的id属性链接到网页上的特定元素。这用于维基百科文章的小节:

https://en.wikipedia.org/wiki/Fragment_identifier#Basics

当片段包含json时,您可以通过打开浏览器的javascript控制台并调用此代码来检查数据。

JSON.parse(location.hash.substr(1))

单页应用程序可以使用这种方案在URL中存储状态,以便您可以将其加入书签并共享URL。