我在用着请求.js https://github.com/request/request用于 Node.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' }
to http://www.example.com/getData
,代理将重定向到http://us.example.com/getData
.
上面的代码确实重定向到http://us.example.com/getData
, but 如何使用发布数据设置重定向?
这即使不是不可能,也是很难做到的。
如果通过发送“301 Moved Permanently”或“302 Found”HTTP 状态代码来完成重定向,那么实际上它的工作方式就好像发送了“303 See Other”,即获取请求被制作正文中没有发送任何数据.
See HTTP 状态代码列表 https://en.wikipedia.org/wiki/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 实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)