我有以下的node.js服務器設置監聽端口9001如何通過HTTPS將AJAX請求發送到node.js服務器?
var https = require('https');
var fs = require('fs');
var qs = require('querystring');
var options = {
key: fs.readFileSync('privatekey.pem'),
cert: fs.readFileSync('certificate.pem')
};
https.createServer(options, function (req, res) {
res.writeHead(200);
console.log('Request Received!');
console.log(req.method);
if (true || req.method == 'POST') {
var body = '';
req.on('data', function (data) {
body += data;
});
req.on('end', function() {
console.log(body);
var POST = qs.parse(body);
console.log(POST);
});
}
res.end("hello, world\n");
}).listen(9001);
,我試圖讓該服務器到AJAX響應號召
function form_save()
{
console.log("submitted!");
var data_obj = {
data1: "item1",
data2: "item2"
}
$.ajax({
url: 'https://adam.testserver.com:9001/',
type: "POST",
dataType: "json",
data: data_obj,
success: function() {
console.log("success!");
},
complete: function() {
console.log("complete!");
}
});
}
沒有與發生的兩個問題我的安排。第一個是,如果我啓動服務器,然後點擊觸發我的form_save按鈕()的節點服務器不響應,我得到以下錯誤:
submitted!
OPTIONS https://adam.testserver.com:9001/ Resource failed to load
jQuery.extend.ajaxjquery.js:3633
$.ajaxjquery.validate.js:1087
form_savew_worksheet.php:64
confirm_deletew_worksheet.php:95
jQuery.event.handlejquery.js:2693
jQuery.event.add.handlejquery.js:2468
w_worksheet.php:73
complete!
在這一點上,如果我訪問該網址directy( https://adam.testserver.com:9001/)我得到預期的「hello,world」輸出以及控制檯消息「Request Received! GET」。從這一點上,如果我點擊按鈕觸發我的AJAX呼叫,我會得到一個新的錯誤。
submitted!
XMLHttpRequest cannot load https://adam.testserver.com:9001/. Origin
https://adam.testserver.com is not allowed by Access-Control-Allow-Origin.
w_worksheet.php:73
complete!
我不明白爲什麼我得到這個消息既是我的形式和節點服務器駐留在同一臺服務器上。感謝您抽出寶貴的時間閱讀,我非常感謝任何幫助。我已經被卡住了一段時間了!
謝謝!這是很棒的信息,讓我重新開始運行。它的作品,但我很好奇,爲什麼這被認爲是交叉起源。是否因爲我提交的表單是坐在apache服務器上的,我試圖在節點服務器中處理它的數據?再次感謝您的幫助! – akronymn 2012-02-18 16:00:40
對不起,延遲迴復。我認爲[這是爲什麼](http://www.w3.org/TR/cors/#access-control-allow-origin-response-hea#user-agent-security)。它看起來像所有的HTTPS請求都需要CORS,因爲SSL證書可能不同(因此由兩個獨立的邏輯實體正式運行)。 – 2012-02-20 17:12:06