【问题标题】:request follow redirection without post data请求跟随重定向而不发布数据
【发布时间】:2017-09-10 14:50:25
【问题描述】:

我在 Node.js 中使用 request.js 进行 http 请求。

request({
  method: 'POST',
  uri: 'http://www.example.com/getData',
  followAllRedirects: true,
  followOriginalHttpMethod: true,
  json: true,
  form: {
    id: 1,
    msg: 'Test data',
  },
}, (err, res, body) => {})

假设当我将{ id: 1, msg: 'Test data' } 发布到http://www.example.com/getData 时,代理将重定向到http://us.example.com/getData

上面的代码确实会重定向到http://us.example.com/getData,但是我怎样才能用帖子数据设置重定向?

【问题讨论】:

    标签: node.js http request


    【解决方案1】:

    如果不是不可能,这将很难做到。

    如果重定向是通过发送“301 Moved Permanently”或“302 Found”HTTP 状态代码完成的,那么实际上它就像发送“303 See Other”一样,即GET 请求 在正文中没有发送任何数据

    参见维基百科上的List of HTTP status codes

    这是一个与标准相矛盾的行业实践示例。 HTTP/1.0 规范 (RFC 1945) 要求客户端执行 临时重定向(原始描述短语是“已移动 暂时”),但流行的浏览器实现了 302 303 的功能参见其他。因此,HTTP/1.1 增加了状态 代码 303 和 307 来区分这两种行为。 但是,一些 Web 应用程序和框架使用 302 状态码 好像是 303。

    创建了一个“307 临时重定向”(从 HTTP/1.1 开始)来解决这个不允许更改 HTTP 方法的问题 - 所以来自 POST 的重定向仍然应该是 POST - 请参阅维基百科:

    在这种情况下,应该使用另一个 URI 重复请求; 但是,未来的请求仍应使用原始 URI。在 与历史上 302 的实现方式相比,请求方法 重发原请求时不允许更改。为了 例如,应该使用另一个 POST 重复一个 POST 请求 请求。

    但是很难说这在特定情况下是否可行,因为它取决于您调用的 API,并且需要更改该 API 实现。

    【讨论】:

    • 所以标准不要求帖子重定向与原始帖子数据一起发送?
    猜你喜欢
    • 2016-08-30
    • 2017-01-24
    • 2019-06-08
    • 2015-12-09
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多