我正在开发一个Web客户端,它使用Node.js的请求模块来请求一个服务器。 发送的请求是POST请求。 服务器使用Express以Node.js编写。 还有另外一层NGINX作为代理,将请求redirect到Node.js中写入的服务器。
问题是:每当我尝试发送请求,而不明确定义任何头,NGINX发送内容长度,#411(长度要求)的HTML错误。 哪里,当我尝试使用浏览器和curl发送类似的请求,一切工作正常。 示例代码如下所示:
request.post(url, function(err, response, data) { if(err) { console.log(err); } else { console.log(data); } }).form({'data':'someValue'})
此外,现在当我添加内容长度的请求的头,然后NGINX挂起,看来NGINX正在等待更多的数据到达。 NGINX不会将请求转发给服务器。
添加的选项包括内容长度
var dataObj = {'data' = 'someValue'}; var options = { 'uri' = url , 'headers' = { 'Content-Length' = JSON.stringify(dataObj).length } }; request.post(options, function(err, response, data) { if(err) { console.log(err); } else { console.log(data); } }).form({'data':'someValue'});
我在做什么错在发送请求?
我找到了解决方案。 我正在发送JSON数据。 错误是我正在使用form()
函数,它将标题设置为“Content-type:application / x-www-form-urlencoded; charset = utf-8”。 从请求文档引用
形式 – 当传递一个对象时,这将设置主体,但是一个querystring表示值,并添加内容类型:应用程序/ x-www-form-urlencoded; charset = utf-8头。 当没有选项传递一个FormData实例返回将被管道请求。 auth – 一个包含用户值||的散列 用户名,密码|| 通过,立即发送(可选)。 见上面的文档。 json – 设置正文,但JSON表示值,并添加Content-type:application / json标题。 另外,将响应主体解析为json。
一旦我使用json
选项,并删除form()
函数,它开始正常工作。