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

2022-08-30 11:11:11

例如,如果我输入网址:

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

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

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


答案 1

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

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

以下是维基百科对此的看法:

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


答案 2

https://www.rfc-editor.org/rfc/rfc2396#section-4

当使用 URI 引用对标识的资源执行检索操作时,可选片段标识符(由交叉阴影 (“#”) 字符与 URI 分隔)由用户代理在检索操作成功完成后解释的其他引用信息组成。因此,它不是 URI 的一部分,但通常与 URI 结合使用。