据我所知,使用 HTTP 是不可能做到这一点的。 HTTP 中的重定向具体意味着客户端应该发送第二个请求。
我认为您想要的更类似于为某些资源指定“规范网址”,然后将此规范网址显示在浏览器位置栏中。
RFC 6596 https://www.rfc-editor.org/rfc/rfc6596指定一种指定规范 url 的方法<link rel="canonical">
。但是,它没有指定浏览器应该用它做什么(如果有的话)。 Google 使用它来更好地选择要索引的网址。
除了使用之外<link>
标签,还可以通过 HTTP 指定资源之间的关系Link
标题,即Link: </better-url>; rel=canonical
. See http://www.w3.org/wiki/LinkHeader http://www.w3.org/wiki/LinkHeader。我不确定谷歌是否会接受这个。页面位于没有提到谷歌支持它。浏览器肯定会忽略它,就像它们对待几乎任何链接标签一样,样式表是一个值得注意的例外。
如果相关内容是 HTML 文档,您可以使用HTML5历史API https://developer.mozilla.org/en/docs/DOM/Manipulating_the_browser_history为了这。具体来说,使用history.replaceState
方法。我认为其他类型的内容不可能实现类似的目标。
Edit
Content-Location
标题实际上可能非常适合您想要的内容。
来自 HTTP 1.1 RFC 的第 14.14 节:
当可以从与所请求资源的 URI 不同的位置访问该实体时,Content-Location 实体头字段可以用于为消息中包含的实体提供资源位置。服务器应该为与响应实体对应的变体提供内容位置;特别是在资源具有与其关联的多个实体的情况下,并且这些实体实际上具有可以单独访问它们的单独位置,服务器应该为返回的特定变体提供内容位置。
Content-Location = "Content-Location" ":"
( absoluteURI | relativeURI )
Content-Location 的值还定义实体的基本 URI。
Content-Location 值不能替代原始请求的 URI;它只是请求时与该特定实体对应的资源位置的声明。如果希望识别该特定实体的源,则未来的请求可以指定内容位置 URI 作为请求 URI。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
也可以看看HTTP 标头字段“Content-Location”的用途是什么? https://stackoverflow.com/questions/447679/what-is-the-purpose-of-the-http-header-field-content-location