chi*_*fet 35 url hash redirect http fragment
出于某种原因,非IE浏览器似乎在发送服务器端重定向(使用Location头)时保留URL哈希(如果存在).例:
// a simple redirect using Response.Redirect("http://www.yahoo.com");
Text.aspx
Run Code Online (Sandbox Code Playgroud)
如果我访问:
Test.aspx#foo
Run Code Online (Sandbox Code Playgroud)
在Firefox/Chrome中,我被带到:
http://www.yahoo.com#foo
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么会这样?我已经在不同的平台上尝试了各种服务器端重定向(虽然所有这些都导致了Location头),但这似乎总是发生.我没有在HTTP规范中看到它,但它似乎确实是浏览器本身的问题.URL哈希(如预期的那样)永远不会发送到服务器,因此服务器重定向不会被它污染,浏览器只是出于某种原因持久化它.
有任何想法吗?
Ben*_*Ben 73
我建议这是正确的行为.302和307状态代码表示资源可在其他地方找到.#bookmark是资源中的位置.
找到资源(html文档)后,浏览器就可以#bookmark在文档中找到它.
这个比喻是这样的:你想在第57章的书中查找一些东西,所以你去图书馆拿到这本书.但是书架上有一张纸条说这本书已经移动了,它现在在另一栋楼里.所以你去了新的位置.你仍然想要第57章 - 你得到这本书的地方无关紧要.
Gum*_*mbo 24
这是以前的HTTP规范未涵盖的一个方面,但已在后面的HTTP开发中解决:
如果服务器返回响应代码300("多选"),301("永久移动"),302("暂时移动")或303("看到其他"),并且服务器还返回一个或多个URI在可以找到资源的地方,客户端应该对新的URI进行处理,就好像最后添加了原始URI的片段标识符一样.
例外情况是返回的URI已经具有片段标识符.在这种情况下,不得将原始片段标识符添加到其中.
因此,原始URI的片段也应该用于重定向URI,除非它还包含片段.
虽然这只是2000年到期的草案,但似乎上述行为是当今Web浏览器中事实上的标准行为.
@Julian Reschke或@Mark Nottingham可能对此有更多/更好的了解.
| 归档时间: |
|
| 查看次数: |
13812 次 |
| 最近记录: |