为什么URL的哈希部分在服务器端不可用?

CRI*_*ion 34 javascript php url hash href

例如,如果我输入URL:

http://www.foo.com/page.php?parameter=kickme#MOREURL

然后在服务器上没有任何部分:#MOREURL

是否可以在没有jQuery AJAX的情况下将这些部分发送到服务器?

sha*_*mar 45

不,它仅适用于浏览器,因此您必须使用Javascript处理它.服务器无法读取它.

说明:
基本上,页面URL的哈希组件(#符号后面的部分)仅由浏览器处理 - 浏览器从不将其传递给服务器.遗憾的是,这是HTML标准的一部分,无论您是使用IE还是任何其他浏览器(以及PHP或任何其他服务器端技术),都是相同的.

以下是维基百科所说的内容:

片段标识符的功能与URI的其余部分不同:即,它的处理完全客户端的,没有服务器的参与.当代理(例如Web浏览器)从Web服务器请求资源时,代理会将URI发送到服务器,但不会发送该片段.相反,代理等待服务器发送资源,然后代理根据片段值处理资源.在最常见的情况下,代理将Web页面向下滚动到锚元素,该锚元素具有等于片段值的属性字符串.其他客户行为也是可能的

  • 没有@what,这不可靠.如果哈希位于查询字符串之后,那么`%23`将被简单地视为值的一部分,即`?foo = bar%23what`,将导致服务器字面上解释为$ foo ='bar#what'. (2认同)

med*_*iev 8

http://tools.ietf.org/html/rfc2396#section-4

当URI引用用于对所标识的资源执行检索操作时,通过交叉线("#")字符与URI分离的可选片段标识符包括在检索之后由用户代理解释的附加参考信息.行动已成功完成.因此,它不是URI的一部分,但通常与URI结合使用.


小智 5

我想扩展为什么该片段未发送到服务器的答案。因为这是故意和期望的行为。让我们整体来看一下URL字符串。

/path/to/element?query=string&for=server#?optional=fragment&for=browser <----- URI ----> <---- QUERY STRING ---> <----- FRAGMENT STRING ------>

URI唯一指定从服务器获取的资源

QUERY定义服务器要在资源上执行的操作

FRAGMENT控制浏览器(应用程序)的行为。片段应用于存储应为用户可见的应用程序状态,以便用户可以将链接发送给另一个用户以获取相同的应用程序状态。

片段是URL唯一免费的部分,您可以透明地实现单页Web应用程序(例如,可以在您的手机上离线运行)。 因此,不得将其发送到服务器。