物件HttpsServer
HttpsServer 是用來建立https 伺服器的對象,HttpsServer 物件可以使用HttpServer所有的介面函數和屬性。 HttpsServer 物件可以透過在建立時傳入之前使用openssl 產生的憑證物件 (X509Cert類型) 和密鑰物件 (PKey類型),從而為客戶端提供ssl加密保護的服務
https 伺服器物件是將SslServer和HttpHandler組合封裝的對象,方便快速建置伺服器,邏輯相當於:
1
2
3var svr = new net.SslServer(crt, key, addr, port, new http.Handler(function(req) {
...
}));
下面是一個使用HttpsServer 的範例程式碼:
1
2
3
4
5
6
7
8
9
10
11
12const http = require("http");
const crypto = require("crypto");
// load cert and key
const cert = crypto.loadCert("server.crt");
const key = crypto.loadPKey("server.key");
// create https server
const server = new http.HttpsServer(cert, key, 8443, function(req) {
resp.response.write(`Hello, Fibjs!`);
});
server.start();
在上面的範例中,我們載入了一個名為"server.crt" 和"server.key" 的憑證和私鑰文件,然後使用HttpsServer 物件建立了一個服務,並開啟了監聽8443 連接埠的服務,當客戶端透過" https://localhost:8443/ " 存取服務時,就可以受到ssl加密保護。
要注意的是,如果是需要讓外部存取的話,需要確保憑證是公信機構頒發的,否則客戶端無法驗證,降低了效能和安全,並可能觸發安全警告。
繼承關係
建構函數
HttpsServer
HttpsServer 建構函數,在所有本機位址偵聽
1
2
3new HttpsServer(Array certs,
Integer port,
Handler hdlr);
呼叫參數:
certs 格式為:
1
2
3
4
5
6
7
8
9
10
11[{
name: "fibjs.org",
crt: [X509Cert object],
key: [PKey object]
},
{
name: "*.fibjs.org",
crt: [X509Cert object],
key: [PKey object]
}
]
HttpsServer 建構函數
1
2
3
4new HttpsServer(Array certs,
String addr,
Integer port,
Handler hdlr);
呼叫參數:
- certs: Array, 伺服器憑證列表
- addr: String, 指定http伺服器偵聽位址,為"" 則在本機所有位址偵聽
- port: Integer, 指定http伺服器偵聽連接埠
- hdlr:Handler,http內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見
certs 格式為:
1
2
3
4
5
6
7
8
9
10
11[{
name: "fibjs.org",
crt: [X509Cert object],
key: [PKey object]
},
{
name: "*.fibjs.org",
crt: [X509Cert object],
key: [PKey object]
}
]
HttpsServer 建構函數,在所有本機位址偵聽
1
2
3
4new HttpsServer(X509Cert crt,
PKey key,
Integer port,
Handler hdlr);
呼叫參數:
- crt:X509Cert,X509Cert證書,用於客戶端驗證伺服器
- key:PKey,PKey私鑰,用於與客戶端會話
- port: Integer, 指定http伺服器偵聽連接埠
- hdlr:Handler,http內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見
HttpsServer 建構函數
1
2
3
4
5new HttpsServer(X509Cert crt,
PKey key,
String addr,
Integer port,
Handler hdlr);
呼叫參數:
- crt:X509Cert,X509Cert證書,用於客戶端驗證伺服器
- key:PKey,PKey私鑰,用於與客戶端會話
- addr: String, 指定http伺服器偵聽位址,為"" 則在本機所有位址偵聽
- port: Integer, 指定http伺服器偵聽連接埠
- hdlr:Handler,http內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見
成員屬性
verification
Integer, 設定憑證驗證模式,預設為VERIFY_NONE
1Integer HttpsServer.verification;
ca
X509Cert, 用戶端憑證驗證ca
1readonly X509Cert HttpsServer.ca;
maxHeadersCount
Integer, 查詢並設定最大請求頭個數,缺省為128
1Integer HttpsServer.maxHeadersCount;
maxHeaderSize
Integer, 查詢並設定最大請求頭長度,預設為8192
1Integer HttpsServer.maxHeaderSize;
maxBodySize
Integer, 查詢並設定body 最大尺寸,以MB 為單位,預設為64
1Integer HttpsServer.maxBodySize;
enableEncoding
Boolean, 自動解壓縮功能開關,預設為關閉
1Boolean HttpsServer.enableEncoding;
serverName
String, 查詢設定伺服器名稱,預設為:fibjs/0.x.0
1String HttpsServer.serverName;
socket
1readonly Socket HttpsServer.socket;
handler
Handler, 伺服器目前事件處理介面對象
1Handler HttpsServer.handler;
成員函數
enableCrossOrigin
允許跨域請求
1HttpsServer.enableCrossOrigin(String allowHeaders = "Content-Type");
呼叫參數:
- allowHeaders: String, 指定接受的http頭字段
start
啟動目前伺服器
1HttpsServer.start();
stop
關閉socket中止正在運作的伺服器
1HttpsServer.stop() async;
toString
傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現
1String HttpsServer.toString();
回傳結果:
- String, 傳回物件的字串表示
toJSON
傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合
1Value HttpsServer.toJSON(String key = "");
呼叫參數:
- key: String, 未使用
回傳結果:
- Value, 傳回包含可JSON 序列化的值