node.js 模块发送的 HTTPS 请求与通过 XMLHttpRequest 发送的请求有什么区别?
我正在尝试使用 JavaScript(XMLHttpRequest)发送 HTTPS GET 请求,从 Amazon AWS 获取安全令牌,但始终会出现“起源 http://my_ip 不被 Access-Control-Allow-Origin 允许”的错误。但是,如果我通过 node.js 模块发送相同的 HTTPS GET 请求,则可以正常工作。
我感到困惑,因为如果服务器支持 CORS,则任何地方的任何请求都应该失败。但是通过 node.js 可以通过,而通过 XMLHttpRequest 则不行。
这个例子是失败的。
var url_ = "https://sts.amazonaws.com/?Action=GetSessionToken" +
"&DurationSeconds=3600" +
"&AWSAccessKeyId=XXXXXXXXXXXXXXX" +
"&Version=2011-06-15" +
"&Timestamp=" + encode(timestamp) +
"&Signature=" + encode(hash) +
"&SignatureVersion=2&SignatureMethod=HmacSHA256";
// Simple GET request
$.get(url_, function(data) {
alert("response: " + data);
});
这个有效
var https = require('https');
var options = {
host : 'sts.amazonaws.com',
method : 'GET',
path : '/?Action=GetSessionToken' +
'&DurationSeconds=3600' +
'&AWSAccessKeyId=XXXXXXXXXXXXXX' +
'&Version=2011-06-15' +
'&' + timestamp +
'&' + signature +
'&SignatureVersion=2&SignatureMethod=HmacSHA256'
};
https.get(options, function(res) {
res.on('data', function(d) {
process.stdout.write(d);
});
}).on('error', function(e) {
console.error(e);
});
有人能解释一下这个是如何工作的吗?