gpt4 book ai didi

dart - Dart 中的 HttpServer 流返回什么样的错误

转载 作者:行者123 更新时间:2023-12-04 03:46:47 25 4
gpt4 key购买 nike

我正在浏览 Dart server documentation .我看到我可以像这样等待一个HttpRequest:

import 'dart:io';

Future main() async {
var server = await HttpServer.bind(
InternetAddress.loopbackIPv4,
4040,
);
print('Listening on localhost:${server.port}');

await for (HttpRequest request in server) {
request.response.write('Hello, world!');
await request.response.close();
}
}

那是因为HttpServer实现了Stream。但是由于流可以返回一个值或一个错误,我应该像这样捕获异常,对吧:

try {
await for (HttpRequest request in server) {
request.response.write('Hello, world!');
await request.response.close();
}
} catch (e) {
// ???
}

但是我不确定能捕获什么样的异常。异常是来自请求(并保证 400 级响应)还是来自服务器(并保证 500 级响应)?还是两者兼而有之?

最佳答案

错误状态码

异常情况下,将设置一个BAD_REQUEST状态码:

    } catch (e) {
// Try to send BAD_REQUEST response.
request.response.statusCode = HttpStatus.badRequest;

(参见 source)

那将是 400(请参阅 badRequest)。

流错误

In that same catch block ,异常将为 rethrown,这意味着您仍然会收到流中的所有错误。这发生在 processRequest ,它处理 bind 中的所有请求。
你会在流中收到错误,因为它们是 forwarded to the sink in bind .

错误类型

我只能找到一个显式异常类型:

    if (disposition == null) {
throw const HttpException(
"Mime Multipart doesn't contain a Content-Disposition header value");
}
if (encoding != null &&
!_transparentEncodings.contains(encoding.value.toLowerCase())) {
// TODO(ajohnsen): Support BASE64, etc.
throw HttpException('Unsupported contentTransferEncoding: '
'${encoding.value}');
}

(参见 source)

这两个都是HttpExceptions .

关于dart - Dart 中的 HttpServer 流返回什么样的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65047098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com