http - 更改请求网址?

2023-12-27

是否可以在不重定向的情况下更改 HTTP 请求的 url?

例如代替:

要求1

GET /user/abc123/ HTTP/1.1

HTTP/1.1 301 Moved Permanently
Location: /files/abc123

要求2

GET /files/abc123 HTTP/1.1

HTTP/1.1 200 OK
.
.
[filecontent]

我可以直接回复文件,但让客户知道他被重定向了:

单一请求

GET /user/abc123/ HTTP/1.1

HTTP/1.1 200 OK
Location: /files/abc123
.
.
[filecontent]

据我所知,使用 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http - 更改请求网址? 的相关文章

随机推荐