考虑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就会导致数据库调用以获取对象。这意味着重定向过程将是:
http://stackoverflow.com/questions/28057406/
25257999
以获取存根的名称http://stackoverflow.com/questions/28057406/is-it-possible-to-return-http-code-200-but-give-a-better-url-without-using-3x
25257999
以呈现最终页面。如果可能,我也不想使用Javascript。
那么,是否可以将Location
作为HTTP标头的一部分返回,状态代码为200
和实际页面,或者我是否因使用3xx
调用或Javascript而停滞不前?
答案 0 :(得分:2)
如果您只是在做HTTP,您可以选择重定向,也可以不选择重定向...您也可以(使用Content-Location)告诉客户端规范地址实际上是在其他地方...但没有浏览器会对此作出回应。
为避免数据库调用,您当然可以缓存结果。
但是,如果您在浏览器中,则可以使用window.history.pushState
动态更新当前地址,而无需强制刷新。
有关该电话的更多信息,请参阅其他SO答案: