nodejs中发送https请求怎么设置请求头

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs中发送https请求怎么设置请求头相关的知识,希望对你有一定的参考价值。

参考技术A 用URL.openConnection()得到一个URLConnection对象,然后用URLConnection.setRequestProperty()来设置头信息

从 Angular 向 nodejs 发送 https 请求。无法发送任何数据

【中文标题】从 Angular 向 nodejs 发送 https 请求。无法发送任何数据【英文标题】:send https request from angular to nodejs. Can't send any data 【发布时间】:2016-12-27 14:48:25 【问题描述】:

首先我有我的 Angular 应用程序:

var app = angular.module('app', []);
angular.module('app.controllers', []);

app.config(function($httpProvider)
   delete $httpProvider.defaults.headers.common['X-Requested-With'];

   $httpProvider.defaults.headers.common = ;
   $httpProvider.defaults.headers.post = ;
   $httpProvider.defaults.headers.put = ;
   $httpProvider.defaults.headers.patch = ;
);

这是一个角度控制器:

angular.module('app').controller('loginController', ['$scope', '$http', function($scope, $http)

   $http(
       method: 'POST',
       url: 'https://xxx-xxx.c9users.io:xxxx/api/registerUser',
       headers:  'Content-Type': 'application/json' ,
       data:  test: 'something' 
   );

]);

然后是我的 nodejs 代码:

var express = require('express');
var app = express();
var bodyParser= require('body-parser');

app.use(function(req, res, next) 
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
   next();
);

app.use(bodyParser.json());

var server = app.listen(process.env.PORT, function () 
   var host = server.address().address
   var port = server.address().port
);

app.post('/api/registerUser', function (req, res) 
   //req.body.test do something..
);

所以每当我尝试将此请求发送到节点服务器时。我在浏览器控制台中收到以下错误:

*选项https://xxx-xxx.c9users.io:xxx/api/registerUser *

XMLHttpRequest 无法加载 https://xxx-xxx.c9users.io:xxxx/api/registerUser。预检响应包含无效的 HTTP 状态代码 404

而且服务器永远不会收到请求。但是,如果我这样称呼它:

$http.post('https://xxx-xxx.c9users.io:xxxx/api/registerUser');

服务器接收请求不会有任何问题,但没有数据。我在这里做错了什么?

【问题讨论】:

可能缺少 OPTIONS 的路线?当您尝试此解决方案时发生了什么? ***.com/questions/33660712/… @OlaEkdahl 我现在已经尝试过了,并在上面添加了它。但恐怕没有效果。 【参考方案1】:

我同意,在我看来您缺少 options 方法。 也添加这个:

res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");

【讨论】:

我现在添加了以下行,但没有效果。【参考方案2】:

如果您从其他域请求,则必须允许服务器端的跨域资源。

这里是如何使用express框架开启CORS的小节点sn-p。

NodeJS 代码片段

allowCrossDomain = function(req, res, next) 
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
  if ('OPTIONS' === req.method) 
    res.send(200);
   else 
    next();
  
;

app.use(allowCrossDomain);

【讨论】:

好的 if ('OPTIONS' === req.method) res.send(200); 其他 下一个(); 是什么为我解决了这个问题,谢谢 :)

以上是关于nodejs中发送https请求怎么设置请求头的主要内容,如果未能解决你的问题,请参考以下文章

nodejs post请求 怎么用url

nodejs 怎么获取post请求的json数据

c# 怎么设置http报文头

php post请求发送xml 数据 怎么添加请求头

使用HTTPS请求http.nonproxyhosts Play框架1.2.5问题,怎么解决

httpclient怎么发送请求并携带Cookie