taz*_*azo 8 javascript xmlhttprequest node.js
通过node.js模块发送的HTTPS请求与XMLHttpRequest之间有什么区别?
我正在尝试向amazon aws发送HTTPS GET请求以从javascript(XMLHttpRequest)获取安全令牌,并且它始终失败,并且"来源控制 - 允许 - 来源"不允许"来源http:// my_ip ",但是如果我通过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);
});
Run Code Online (Sandbox Code Playgroud)
这个工作
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);
});
Run Code Online (Sandbox Code Playgroud)
有谁能解释我这是如何工作的?
浏览器受同源策略约束.Node.js不是.
也就是说,浏览器将允许脚本通过XHR仅向与加载脚本的页面相同的域中的站点发出HTTP请求.但是,Node.js将允许对任何域的HTTP请求.
(现在使用CORS的浏览器故事稍微复杂一些,但这仍然是基本问题.)
编辑 - 详细说明,现在我已经重新阅读了你的问题:CORS是一个合作协议.互联网上的服务器通常会向任何人提供内容; 这就是运行Web服务器的重点.除非请求者询问,否则CORS与HTTP请求无关.如果您有URL"http:// xyz/something",并在浏览器的地址栏中输入,那么浏览器将毫不犹豫地向该站点发出HTTP请求.当来自另一个域(而不是"xyz")的站点的页面中的某些代码尝试通过XHR运行HTTP请求时,同源策略(和CORS)才会发挥作用.在这种情况下,浏览器会向"xyz"网站询问访问权限; 默认答案是"否",但这是浏览器强制执行该规则,而不是服务器.
| 归档时间: |
|
| 查看次数: |
4024 次 |
| 最近记录: |