当前位置: 首页 > 面试题库 >

为什么POST重定向到GET而PUT重定向到PUT?

葛学民
2023-03-14
问题内容

我正在使用express 4.13.3(最新)和以下代码:

var express = require('express')

var app = express()

app.get('/test', function (req, res, next) {
  res.send('hello!')
})

app.post('/test', function (req, res, next) {
  res.redirect('/test')
})

app.put('/test', function (req, res, next) {
  res.redirect('/test')
})

app.listen(5001)

// GET /test -> 'hello!'
// POST /test -> 'hello!'
// PUT /test -> ERR_TOO_MANY_REDIRECTS

POST重定向到GET,但PUT重定向到PUT。是否可以将PUT重定向到GET(与POST相同)?


问题答案:

在详细讨论之前,下面是解决问题的一种方法:

app.put('/test', function(req, res, next) {
    res.redirect(303, '/test') // Notice the 303 parameter
})

默认情况下,Express使用HTTP代码302进行重定向。根据HTTP规范,这可以防止POST
/ PUT请求被重定向为POST / PUT请求,并解释了您在代码中观察到的内容:

如果响应GET或HEAD以外的请求而接收到302状态码,则用户代理不得自动重定向该请求,除非用户可以确认,因为这可能会更改发出该请求的条件。

303:由于未定义的原因重定向。通常,“操作已完成,请在其他位置继续。” 对此资源进行后续html" target="_blank">请求的客户端不应使用新的URI。客户端应遵循POST /
PUT / DELETE请求的重定向。



 类似资料:
  • 我试图点击一个postendpoint,但它给出了错误302,当我在同一台服务器上尝试另一个get Url时,它给出了200。然后,我使用laxrirectstrategy()重定向了post请求。post请求正在重定向到get请求(只有同一个endpoint的方法名是get和post),它没有从post方法获得响应。有人能告诉我如何使用apahce httpClient 4.5将post请求重定

  • 我不能在设置cookie后返回任何地方,cookie设置正确,但在设置cookie后,它不会重定向任何地方。 下面是我的代码: 下面是JavaScript的功能: 这是我的函数,但不重定向到索引或其他任何地方:

  • 我有一个两步验证表单,这意味着第一个用户输入得到验证(在ValidatecKetData控制器中),如果一切正常,您可以进入下一个表单页面,我可以通过 问题:在第二页,用户需要上传一个文件,如果他不这样做,验证失败。 如果是这种情况,验证器类立即重定向,因为它是后路由,所以不起作用。 所以我创建了一个这样的获取路线: 并将其放入-方法: 我把它放到了-method中,因为如果用户不在第二页附加文件

  • 我已经使用开发人员沙盒帐户构建了一个集成。我最近将我的应用程序升级为live,并将我的生产环境配置为使用新的集成id和secret以及live Docusign url。 但是,当我尝试在应用程序的帐户中创建oauth连接时,我的服务器会获取一个代码,将客户端重定向到Docusign以进行身份验证,但Docusign登录屏幕显示错误“没有向Docusign注册的重定向URI”。事实并非如此-我的开

  • 我有一个超文本标记语言登录页面,其中我有一个管理和用户的单选按钮,根据它,如果用户选择管理员,那么它应该重定向到管理员登录页面,如果他选择用户,那么它应该转到用户登录页面。 html登录页面如下: 用户的admin_login.php页面如下所示: 会话_start(); $email=$_POST["email"]; $psw=$_POST["psw"]; $name=“”; 包括db_conf

  • 隐私设置->清除浏览数据(从时间开始) https/ssl->管理证书->删除所有项(包括证书) 检查没有书签。 Firefox也有类似的问题,但它的解决方案不适用于Chrome。有人对我能做些什么有什么建议吗?提前感谢您的帮助!