在当前的HTTP规范中,URL片段(URL的一部分,包括并跟随#
)不会以任何方式发送到服务器。然而,随着AJAX(它使用片段来维护某种形式的状态)的日益普及,在许多情况下,服务器在请求时知道URL片段是很有用的。
例如,如果您转到http://facebook.com,然后单击流中的用户名,URL将变为http://faceboook.com/#!/username -允许FB更新你的页面,而无需重新加载所有的bootstrap JS和HTML。但是,如果您要用浏览器重新加载它,服务器将无法看到"#/!"用户名"部分的URL,因此无法为您预呈现内容。这将迫使浏览器在客户端Javascript加载并解析该片段后发出额外的请求。
我想知道是否有任何努力或建议来创建一个标准机制来实现这一点。
例如,可以有一个标准的HTTP头,它将与URL片段的值一起发送-任何关心这些事情的服务器都可以访问它。
看起来这对整个web应用程序社区来说是一件非常有用的事情,所以我很惊讶没有听到任何提议。也许我错过了。
我想,片段标识符确实不是存储状态的好地方,它被设计成其他用途。
话虽如此,http://www.jenitennison.com/blog/node/154对整个主题进行了很好的讨论。
我发现了Google提出的使Ajax页面可抓取的建议,但它解决了一组更受限的用例。具体来说,它创建了一种方法,用URL参数替换URL片段,以便从服务器获得与使用片段访问等效URL的客户端生成的相同的HTML输出。但是,这些url对于实际运行Ajax应用程序是无用的,因为它们需要每次重新加载页面。
Webkit Bug 24175 - URL重定向丢失片段是指处理重定向URL中可能感兴趣的片段标识符。
对HTTP未来版本的建议可能是添加一个(可选的)请求的片段头,包含片段标识符。
更简单的可能是允许一个HTTP请求包含一个片段标识符。