为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

慕用2447696 2019-07-22 09:44:47

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

例如,如果我输入URL:

http:/www.foo.com/page.php?参数=KKME#MOREURL

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

在没有jQueryAjax的情况下,可以将这些部分发送或获取到服务器吗?


查看完整描述

3 回答

?
幕布斯7119047

不,它只适用于浏览器。所以你必须处理Javascript。服务器无法读取它。

说明:
基本上,页面URL的散列组件(#标志后面的部分)仅由浏览器处理-浏览器从不将其传递给服务器。遗憾的是,这是HTML标准的一部分,无论您是否使用IE或任何其他浏览器(就这一点而言,PHP或任何其他服务器端技术),这都是一样的。

这是什么维基百科关于这一点:

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


查看完整回答
反对 回复 2019-07-22
?
喵喔喔

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

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


查看完整回答
反对 回复 2019-07-22
?
互换的青春

由于浏览器默认不会将散列发送到服务器,因此唯一的方法是使用一些Javascript:

  1. 当表单提交时,获取散列(window.location.hash)并将其存储在服务器端隐藏的输入字段中,将其放入一个ID为“url散列”的dIV中,这样我们以后就可以很容易地找到它。

  2. 在服务器上如果需要使用该值,可以使用它。如果你需要的话,你甚至可以改变它。

  3. 页面加载在客户端,检查此隐藏字段的值。您将希望通过包含在其中的DIV找到它,因为不知道自动生成的ID。是的,您可以在这里使用.ClientID进行一些技巧,但是我们发现只使用包装器DIV就更简单了,因为它允许所有这些Javascript驻留在外部文件中,并以通用的方式使用。

  4. 如果隐藏输入字段有一个有效值,将其设置为URL散列(再次设置为window.locaion.hash)和/或执行其他操作。

我们使用jQuery简化了字段的选择,等等。总之,它最终是一些jQuery调用,一个用来保存值,另一个用来恢复它。

在提交之前:

$("form").submit(function() {
  $("input", "#urlhash").val(window.location.hash);});

页面加载:

var hashVal = $("input", "#urlhash").val();if (IsHashValid(hashVal)) {
  window.location.hash = hashVal;}

IsHashValid()可以检查“未定义”或其他不想处理的事情。

当然,一定要适当地使用$(Document).ready()。


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信