當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart HttpServer用法及代碼示例


dart:io 庫中HttpServer 類的用法介紹如下。

使用 HTTP 協議交付內容(例如網頁)的服務器。

注意:HttpServer 提供低級 HTTP 函數。我們建議用戶評估 Write HTTP servers on dart.dev 中討論的高級 API。

HttpServer 是提供HttpRequest 對象的Stream。每個HttpRequest 都有一個關聯的HttpResponse 對象。服務器通過寫入該HttpResponse 對象來響應請求。以下示例顯示如何將 HttpServer 綁定到端口 80(HTTP 服務器的標準端口)上的 IPv6 InternetAddress 以及如何偵聽請求。端口 80 是默認的 HTTP 端口。但是,在大多數係統上訪問它需要super-user 權限。對於本地測試,請考慮使用非保留端口(1024 及以上)。

import 'dart:io';

void main() async {
  var server = await HttpServer.bind(InternetAddress.anyIPv6, 80);
  await server.forEach((HttpRequest request) {
    request.response.write('Hello, world!');
    request.response.close();
  });
}

不完整的請求(其中缺少全部或部分標頭)將被忽略,並且不會為它們生成異常或 HttpRequest 對象。同樣,當寫入 HttpResponse 時,任何 Socket 異常都將被忽略,並且任何未來的寫入都將被忽略。

HttpRequest 公開請求標頭並提供請求主體(如果存在)作為數據流。如果正文未讀,則在服務器寫入HttpResponse 或關閉它時將其耗盡。

使用安全的 HTTPS 連接綁定

使用 bindSecure 創建 HTTPS 服務器。

服務器向客戶端提供證書。證書鏈和私鑰在傳遞給 bindSecureSecurityContext 對象中設置。

import 'dart:io';

void main() async {
  var chain =
      Platform.script.resolve('certificates/server_chain.pem').toFilePath();
  var key = Platform.script.resolve('certificates/server_key.pem').toFilePath();
  var context = SecurityContext()
    ..useCertificateChain(chain)
    ..usePrivateKey(key, password: 'dartdart');
  var server =
      await HttpServer.bindSecure(InternetAddress.anyIPv6, 443, context);
  await server.forEach((HttpRequest request) {
    request.response.write('Hello, world!');
    request.response.close();
  });
}

證書和 key 是 PEM 文件,可以使用 OpenSSL 中的工具創建和管理。

實現的類型

Stream<HttpRequest>

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 HttpServer class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。