我不确定我是否正确理解您的问题。据我了解,您希望将POST请求
/重定向到
/login棘手的POST请求。
通常,您通过发送301永久移动或302找到的HTTP状态代码来进行重定向。它们通常在实践中都好像是303 See
Other,并且发出GET请求一样。请参阅Wikipedia上的HTTP状态代码列表:
这是行业实践与标准相矛盾的一个例子。HTTP / 1.0规范(RFC
1945)要求客户端执行临时重定向(原始描述短语为“临时移动”),但是流行的浏览器使用303的功能实现了302。因此,HTTP /
1.1添加了状态代码303和307,以区分这两种行为。但是,某些Web应用程序和框架使用302状态代码就像使用303。
创建了307临时重定向(自HTTP / 1.1起)以解决此问题,不允许更改HTTP方法-因此从POST重定向仍应为POST-请参阅Wikipedia:
在这种情况下,应使用另一个URI重复该请求;但是,将来的请求仍应使用原始URI。与历史上实现302的方式相反,在重新发出原始请求时不允许更改请求方法。例如,应使用另一个POST请求重复POST请求。
据我所知,浏览器应该在进行此类重定向之前警告用户。我不知道这在实践中如何运作。我不会依靠它,因为它充其量只会使用户烦恼,甚至根本无法工作。
我的建议是更改此:
app.post('/login', function (req, res) { // logic});对此:
function loginHandler(req, res) { // logic}app.post('/login', loginHandler); app.post('/', loginHandler);或类似的东西,使用正则表达式:
app.post(/^/(?:login)?$/, function (req, res) { // logic});这样,将代替相同的处理程序用于这两个路由。这将更快,更强大,因为那样您就不必依赖重定向工作了,根本就没有重定向。



