Я пытаюсь внедрить прокси-сервер с Dart: веб-приложение, запущенное в браузере, делает запрос на мое приложение-сервер (прокси-сервер), выполняемое локально, а затем прокси-сервер делает запрос на внешний сервер. Затем я добавляю заголовки CORS в ответ, который будет отправлен обратно клиенту (веб-приложение).Реализация прокси-сервера
Вот как я реализовал прокси-сервер:
import 'dart:io';
import 'dart:convert';
main() async {
var server = await HttpServer.bind(InternetAddress.ANY_IP_V6, 8080);
print('Server listening on port ${server.port}...');
var client = 0;
HttpClient proxy;
await for (HttpRequest request in server) {
print('Request received from client ${++client}.');
// Adds CORS headers.
request.response.headers.add('Access-Control-Allow-Origin', '*');
proxy = new HttpClient()
..getUrl(Uri.parse('http://example.com/'))
// Makes a request to the external server.
.then((HttpClientRequest proxyRequest) => proxyRequest.close())
// Sends the response to the web client.
.then((HttpClientResponse proxyResponse) =>
proxyResponse.transform(UTF8.decoder).listen((contents) =>
request.response
..write(contents)
..close()
));
print('Response sent to client $client.');
}
}
Это прекрасно работает в большинстве случаев, но иногда клиент получает только часть ответа. Я думаю, что иногда request.response.close()
выполняется до завершения выполнения request.response.write(contents)
, поэтому ответ отправляется до того, как он закончит запись содержимого.
Есть ли способ решить это и отправить сообщение только после того, как содержимое было написано? Благодарю.