出于某种原因,非 IE 浏览器似乎在发送服务器端重定向(使用 Location header )时保留 URL 哈希(如果存在)。示例:
// a simple redirect using Response.Redirect("http://www.yahoo.com");
Text.aspx
如果我访问:
Test.aspx#foo
在 Firefox/Chrome 中,我被带到:
http://www.yahoo.com#foo
谁能解释为什么会这样?我也尝试过在不同平台上使用各种服务器端重定向(尽管所有结果都在 Location header 中),这似乎总是会发生。我在 HTTP 规范的任何地方都没有看到它,但这似乎确实是浏览器本身的问题。 URL 哈希(正如预期的那样)永远不会发送到服务器,因此服务器重定向不会被它污染,浏览器只是出于某种原因而持久化它。
有什么想法吗?
最佳答案
我建议这是正确的行为。 302 和 307 状态代码表示资源将在别处找到。 #bookmark
是资源中的一个位置。
一旦找到资源(html 文档),浏览器就可以在文档中找到#bookmark
。
类比是这样的:你想在第 57 章的一本书中查找一些东西,所以你去图书馆拿这本书。但是书架上有一张纸条说这本书已经搬走了,现在在另一栋楼里。所以你去新的地方。你仍然想要第 57 章——这与你从哪里得到这本书无关。
关于http - URL 哈希在重定向之间持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5283395/