我正在开发一个用于审核用户生成内容的内部应用程序。
当用户访问该应用程序时,他们会被重定向到?page=X
(其中X是需要审核的下一页)。审核完页面后,他们点击指向?next
的链接,服务器响应另一个302重定向到需要审核的下一页(例如?page=Y
):
?next
- 302 - > ?page=X
?next
- 302 - > ?page=Y
?next
- 302 - > ?page=Z
问题是这些页面没有出现在浏览器的历史记录中。例如,如果用户看到页面X
,则页面Y
,页面Z
,页面Y
和Z
将不会出现在历史记录中(例如,如果用户按下后退按钮,他们将被带到页面X
。
我有一个视频演示了这个问题:http://www.youtube.com/watch?v=k_-NfZzZ700
如何确保显示的所有页面也出现在浏览器的历史记录中?
我也尝试过使用HTTP 303重定向,效果相同。
(注意:我意识到我可以在每个页面中包含指向下一页的链接,因为多个审阅者可能同时工作)
这是视频中使用的代码:
from flask import Flask, request, redirect
app = Flask(__name__)
x = [1]
@app.route("/")
def index():
page = request.args.get("page")
if not page:
return redirect("?page=%s" %(x[0], ))
x[0] += 1
return """
<html>
<title>%s</title>
<body>
<p>page: %s</p>
<a href="?next">go to next page</a>
</body>
</html>
""" %(page, page)
if __name__ == "__main__":
app.run()
答案 0 :(得分:1)
这是在黑暗中拍摄的,但是HTTP 303看起来就像你想要的那样。
答案 1 :(得分:1)
显然,Chrome正在使用未经重定向的网址进行历史记录比较。由于未重定向的URL是相同的(“下一个”),因此不添加任何条目。行为类型是有意义的,因为非重定向的URL是用户打算遵循的,并且您没有说该更改是永久性的。不过,这可能被视为浏览器错误(FF25表现得如预期的那样);见this issue。
所以,虽然看起来没有真正的“解决方案”,但至少有一个解决方法:如果你确保“下一个”网址始终是唯一的(例如,通过附加时间戳查询参数),每个项目将在历史列表中获得自己的条目。当然,根据您的真实应用程序的工作方式(HTML缓存等),这可能不是一个选项/: