当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。