是否可以返回HTTP代码200,但是给出一个更好的"网址没有使用3xx?

时间:2015-01-20 23:59:27

标签: http http-headers

考虑StackOverflow,其中每个问题都有唯一的ID,但URL经常被覆盖以在URL中包含存根。出于可读性和其他原因,存根可以帮助用户知道他们是在正确的位置。

我有一个网站在调用以下网址时返回200:

http://stackoverflow.com/questions/28057406/

但希望将网址更新为:

http://stackoverflow.com/questions/28057406/is-it-possible-to-return-http-code-200-but-give-a-better-url-without-using-3x

第一个调用在技术上是有效的,代码可以检索对象并完美地呈现它,但我想更新URL以使用存根的。

我更喜欢在没有重定向的情况下执行此操作,因为只需获取ID就会导致数据库调用以获取对象。这意味着重定向过程将是:

  1. 致电http://stackoverflow.com/questions/28057406/
  2. 从数据库中检索项25257999以获取存根的名称
  3. 重定向到http://stackoverflow.com/questions/28057406/is-it-possible-to-return-http-code-200-but-give-a-better-url-without-using-3x
  4. 新的HTTP调用,因此从数据库中检索项目25257999以呈现最终页面。
  5. 如果可能,我也不想使用Javascript。

    那么,是否可以将Location作为HTTP标头的一部分返回,状态代码为200和实际页面,或者我是否因使用3xx调用或Javascript而停滞不前?

1 个答案:

答案 0 :(得分:2)

如果您只是在做HTTP,您可以选择重定向,也可以不选择重定向...您也可以(使用Content-Location)告诉客户端规范地址实际上是在其他地方...但没有浏览器会对此作出回应。

为避免数据库调用,您当然可以缓存结果。

但是,如果您在浏览器中,则可以使用window.history.pushState动态更新当前地址,而无需强制刷新。

有关该电话的更多信息,请参阅其他SO答案:

Modify the URL without reloading the page

相关问题