创建https服务
# 生成https证书
- 生成私钥key文件:
openssl genrsa -out privatekey.pem 1024
- 通过私钥生成CSR证书签名 (需要填一些信息、可直接回车)
openssl req -new -key privatekey.pem -out certrequest.csr
- 通过私钥和证书签名生成证书文件
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
# 导入文件
var https = require('https')
,fs = require("fs");
var options = {
key: fs.readFileSync('./privatekey.pem'),
cert: fs.readFileSync('./certificate.pem')
};
https.createServer(options, (req,res) => {
}).listen(3011, 'domain')
preflighted request
一个简单的请求如下:
# HTTP方法是下列之一
HEAD
GET
POST
# HTTP头包含
Accept
Accept-Language
Content-Language
Last-Event-ID
# Content-Type,但仅能是下列之一
application/x-www-form-urlencoded
multipart/form-data
text/plain
任何一个不满足上述要求的请求,即被认为是复杂请求。一个复杂请求不仅有包含通信内容的请求,同时也包含预请求(preflight request)。
# 请求中除GET,POST,Head都需要发送预请求,通过设置一个最大允许时间,可以减少预请求的发送。
http.createServer((req, res) => {
if (req) {
res.setHeader('X-Foo', 'bar');
res.setHeader ('Access-Control-Allow-Methods','PUT,POST,GET,DELETE');
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8082');
res.setHeader("Access-control-max-age", 1000);
res.setHeader('Access-Control-Allow-Headers', 'Origin, Accept-Language, X-Requested-With, Content-Type, Accept, csrfpreventiontoken');
res.writeHead(200, {"Content-Type": "application/json;charset=utf-8"});
res.end('ok');
}
}).listen(8080, 'ipaddress');
# 获取头部信息
req.headers
# 获取参数
post 请求是放在req.body
get 请求是放在JSON.stringify(url.parse(req.url,true).query)