请求遵循重定向而不发布数据

时间:2017-04-14 10:41:36

标签: node.js http request

我在Node.js中使用request.js来获取http请求。

return render_template("index.html",keys=my_keys,Name=my_name,Email=my_email)

假设当我将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,但如何设置重定向和帖子数据?

1 个答案:

答案 0 :(得分:0)

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

如果重定向是通过发送" 301永久移动"或" 302发现" HTTP状态代码然后在实践中它就好像它是" 303见其他"已发送,即 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实现。